aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editors/vi.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/editors/vi.c b/editors/vi.c
index 6fa0a4e18..5b86b0516 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -2227,7 +2227,10 @@ static char *char_insert(char *p, char c, int undo) // insert the char c at 'p'
2227 p--; // open above, indent before newly inserted NL 2227 p--; // open above, indent before newly inserted NL
2228 2228
2229 if (len) { 2229 if (len) {
2230 indentcol = col; 2230 // only record indent if in insert/replace mode or for
2231 // the 'o'/'O' commands, which are switched to insert
2232 // mode early.
2233 indentcol = cmd_mode != 0 ? col : 0;
2231 if (expandtab) { 2234 if (expandtab) {
2232 ntab = 0; 2235 ntab = 0;
2233 nspc = col; 2236 nspc = col;
@@ -4265,6 +4268,9 @@ static void do_cmd(int c)
4265 case 'o': // o- open an empty line below 4268 case 'o': // o- open an empty line below
4266 dot_end(); 4269 dot_end();
4267 dc3: 4270 dc3:
4271#if ENABLE_FEATURE_VI_SETOPTS
4272 cmd_mode = 1; // switch to insert mode early
4273#endif
4268 dot = char_insert(dot, '\n', ALLOW_UNDO); 4274 dot = char_insert(dot, '\n', ALLOW_UNDO);
4269 if (c == 'O' && !autoindent) { 4275 if (c == 'O' && !autoindent) {
4270 // done in char_insert() for 'O'+autoindent 4276 // done in char_insert() for 'O'+autoindent