patch 9.0.1693: Ctrl-Q not handled like Ctrl-V in replace mode

6 views
Skip to first unread message

Christian Brabandt

unread,
Aug 11, 2023, 6:15:09 PM8/11/23
to vim...@googlegroups.com
patch 9.0.1693: Ctrl-Q not handled like Ctrl-V in replace mode

Commit: https://github.com/vim/vim/commit/2d63e4b3ccc0bb34db21a3c1d024cb114f8c4071
Author: Christian Brabandt <c...@256bit.org>
Date: Sat Aug 12 00:03:57 2023 +0200

patch 9.0.1693: Ctrl-Q not handled like Ctrl-V in replace mode

Problem: Ctrl-Q not handled like Ctrl-V in replace mode
Solution: Handle Ctrl-Q like Ctrl-V

closes: #12686
closes: #12684

Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/normal.c b/src/normal.c
index 4004d4204..1aad0b1b3 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4767,7 +4767,7 @@ nv_replace(cmdarg_T *cap)
#endif

// get another character
- if (cap->nchar == Ctrl_V)
+ if (cap->nchar == Ctrl_V || cap->nchar == Ctrl_Q)
{
had_ctrl_v = Ctrl_V;
cap->nchar = get_literal(FALSE);
@@ -5051,7 +5051,8 @@ nv_vreplace(cmdarg_T *cap)
emsg(_(e_cannot_make_changes_modifiable_is_off));
else
{
- if (cap->extra_char == Ctrl_V) // get another character
+ if (cap->extra_char == Ctrl_V || cap->extra_char == Ctrl_Q)
+ // get another character
cap->extra_char = get_literal(FALSE);
if (cap->extra_char < ' ')
// Prefix a control character with CTRL-V to avoid it being used as
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index a3d9454d2..1754fb8d1 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -3998,4 +3998,42 @@ func Test_normal_j_below_botline()
call StopVimInTerminal(buf)
endfunc

+" Test for r (replace) command with CTRL_V and CTRL_Q
+func Test_normal_r_ctrl_v_cmd()
+ new
+ call append(0, 'This is a simple test: abcd')
+ exe "norm! 1gg$r\<C-V>\<C-V>"
+ call assert_equal(['This is a simple test: abc ', ''], getline(1,'$'))
+ exe "norm! 1gg$hr\<C-Q>\<C-Q>"
+ call assert_equal(['This is a simple test: ab ', ''], getline(1,'$'))
+ exe "norm! 1gg$2hr\<C-V>x7e"
+ call assert_equal(['This is a simple test: a~ ', ''], getline(1,'$'))
+ exe "norm! 1gg$3hr\<C-Q>x7e"
+ call assert_equal(['This is a simple test: ~~ ', ''], getline(1,'$'))
+
+ if &encoding == 'utf-8'
+ exe "norm! 1gg$4hr\<C-V>u20ac"
+ call assert_equal(['This is a simple test:€~~ ', ''], getline(1,'$'))
+ exe "norm! 1gg$5hr\<C-Q>u20ac"
+ call assert_equal(['This is a simple test€€~~ ', ''], getline(1,'$'))
+ exe "norm! 1gg0R\<C-V>xff WAS \<esc>"
+ call assert_equal(['ÿ WAS a simple test€€~~ ', ''], getline(1,'$'))
+ exe "norm! 1gg0elR\<C-Q>xffNOT\<esc>"
+ call assert_equal(['ÿ WASÿNOT simple test€€~~ ', ''], getline(1,'$'))
+ endif
+
+ call setline(1, 'This is a simple test: abcd')
+ exe "norm! 1gg$gr\<C-V>\<C-V>"
+ call assert_equal(['This is a simple test: abc ', ''], getline(1,'$'))
+ exe "norm! 1gg$hgr\<C-Q>\<C-Q>"
+ call assert_equal(['This is a simple test: ab ', ''], getline(1,'$'))
+ exe "norm! 1gg$2hgr\<C-V>x7e"
+ call assert_equal(['This is a simple test: a~ ', ''], getline(1,'$'))
+ exe "norm! 1gg$3hgr\<C-Q>x7e"
+ call assert_equal(['This is a simple test: ~~ ', ''], getline(1,'$'))
+
+ " clean up
+ bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 1c528a30a..15368d255 100644
--- a/src/version.c
+++ b/src/version.c
@@ -695,6 +695,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1693,
/**/
1692,
/**/
Reply all
Reply to author
Forward
0 new messages