From f1d21b743485defb39fada03b27878efb1e2f7e3 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Wed, 16 Jun 2021 14:45:10 +0100 Subject: [PATCH] vi: keep autoindent if line isn't empty When ESC is entered to leave insert mode any autoindent should only be removed if there's no content beyond the indent. This may be the case if a line has been split by entering insert mode and then entering a CR. Add a check to ensure there's only a newline after the indent. function old new delta char_insert 912 929 +17 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 17/0) Total: 17 bytes Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- editors/vi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editors/vi.c b/editors/vi.c index ba608fbd2..3daa0756b 100644 --- a/editors/vi.c +++ b/editors/vi.c @@ -2147,7 +2147,7 @@ static char *char_insert(char *p, char c, int undo) // insert the char c at 'p' #if ENABLE_FEATURE_VI_SETOPTS if (autoindent) { len = indent_len(bol); - if (len && get_column(bol + len) == indentcol) { + if (len && get_column(bol + len) == indentcol && bol[len] == '\n') { // remove autoindent from otherwise empty line text_hole_delete(bol, bol + len - 1, undo); p = bol;