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 <[email protected]>
---
 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;
-- 
2.31.1

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to