aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/ex_cmds.c1
-rw-r--r--src/nvim/testdir/test_ex_mode.vim3
-rw-r--r--test/functional/legacy/ex_mode_spec.lua56
3 files changed, 39 insertions, 21 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index afded97a01..4c711d3ebc 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -3874,6 +3874,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
curwin->w_cursor.col = 0;
}
getvcol(curwin, &curwin->w_cursor, NULL, NULL, &ec);
+ curwin->w_cursor.col = regmatch.startpos[0].col;
if (subflags.do_number || curwin->w_p_nu) {
int numw = number_width(curwin) + 1;
sc += numw;
diff --git a/src/nvim/testdir/test_ex_mode.vim b/src/nvim/testdir/test_ex_mode.vim
index 5cf4e9dd2c..2b8c5bebea 100644
--- a/src/nvim/testdir/test_ex_mode.vim
+++ b/src/nvim/testdir/test_ex_mode.vim
@@ -78,6 +78,9 @@ func Test_Ex_substitute()
call WaitForAssert({-> assert_match(' 1 foo foo', term_getline(buf, 5))},
\ 1000)
call WaitForAssert({-> assert_match(' ^^^', term_getline(buf, 6))}, 1000)
+ call term_sendkeys(buf, "N\<CR>")
+ call term_wait(buf)
+ call WaitForAssert({-> assert_match(' ^^^', term_getline(buf, 6))}, 1000)
call term_sendkeys(buf, "n\<CR>")
call WaitForAssert({-> assert_match(' ^^^', term_getline(buf, 6))},
\ 1000)
diff --git a/test/functional/legacy/ex_mode_spec.lua b/test/functional/legacy/ex_mode_spec.lua
index bd4c8bd3ff..e4469d53ed 100644
--- a/test/functional/legacy/ex_mode_spec.lua
+++ b/test/functional/legacy/ex_mode_spec.lua
@@ -44,67 +44,81 @@ describe('Ex mode', function()
it('substitute confirmation prompt', function()
command('set noincsearch nohlsearch inccommand=')
local screen = Screen.new(60, 6)
+ screen:set_default_attr_ids({
+ [0] = {bold = true, reverse = true}, -- MsgSeparator
+ [1] = {foreground = Screen.colors.Brown}, -- LineNr
+ [2] = {bold = true, foreground = Screen.colors.Blue}, -- NonText
+ })
screen:attach()
command([[call setline(1, ['foo foo', 'foo foo', 'foo foo'])]])
command([[set number]])
feed('gQ')
screen:expect([[
- 1 foo foo |
- 2 foo foo |
- 3 foo foo |
- |
+ {1: 1 }foo foo |
+ {1: 2 }foo foo |
+ {1: 3 }foo foo |
+ {0: }|
Entering Ex mode. Type "visual" to go to Normal mode. |
:^ |
]])
feed('%s/foo/bar/gc<CR>')
screen:expect([[
- 1 foo foo |
- |
+ {1: 1 }foo foo |
+ {0: }|
Entering Ex mode. Type "visual" to go to Normal mode. |
:%s/foo/bar/gc |
- 1 foo foo |
+ {1: 1 }foo foo |
^^^^ |
]])
- feed('n<CR>')
+ feed('N<CR>')
screen:expect([[
Entering Ex mode. Type "visual" to go to Normal mode. |
:%s/foo/bar/gc |
- 1 foo foo |
+ {1: 1 }foo foo |
+ ^^^N |
+ {1: 1 }foo foo |
+ ^^^^ |
+ ]])
+ feed('n<CR>')
+ screen:expect([[
+ {1: 1 }foo foo |
+ ^^^N |
+ {1: 1 }foo foo |
^^^n |
- 1 foo foo |
+ {1: 1 }foo foo |
^^^^ |
]])
feed('y<CR>')
feed('q<CR>')
screen:expect([[
- 1 foo foo |
+ {1: 1 }foo foo |
^^^y |
- 2 foo foo |
+ {1: 2 }foo foo |
^^^q |
- 2 foo foo |
+ {1: 2 }foo foo |
:^ |
]])
-- Pressing enter in ex mode should print the current line
feed('<CR>')
screen:expect([[
- 1 foo foo |
+ {1: 1 }foo foo |
^^^y |
- 2 foo foo |
+ {1: 2 }foo foo |
^^^q |
- 3 foo foo |
+ {1: 3 }foo foo |
:^ |
]])
feed(':vi<CR>')
screen:expect([[
- 1 foo bar |
- 2 foo foo |
- 3 ^foo foo |
- ~ |
- ~ |
+ {1: 1 }foo bar |
+ {1: 2 }foo foo |
+ {1: 3 }^foo foo |
+ {2:~ }|
+ {2:~ }|
|
]])
end)