summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2021-10-03 15:19:14 +0100
committerBram Moolenaar <Bram@vim.org>2021-10-03 15:19:14 +0100
commitcc8cd4453332276d55b4a1109eace5785a4f319d (patch)
tree106d521023ab67978d1ea27908b9c881ca83b20d
parent27fef59dd1dd75f50c366f7f616ffa4451560452 (diff)
patch 8.2.3466: completion submode not indicated for virtual replacev8.2.3466
Problem: Completion submode not indicated for virtual replace. Solution: Add submode to "Rv". (closes #8945)
-rw-r--r--runtime/doc/eval.txt12
-rw-r--r--src/misc1.c6
-rw-r--r--src/testdir/test_functions.vim38
-rw-r--r--src/version.c2
4 files changed, 53 insertions, 5 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 588f511553..c3d39d5d6d 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -8074,22 +8074,23 @@ mode([expr]) Return a string that indicates the current mode.
niV Normal using |i_CTRL-O| in |Virtual-Replace-mode|
nt Terminal-Normal (insert goes to Terminal-Job mode)
v Visual by character
+ vs Visual by character using |v_CTRL-O| in Select mode
V Visual by line
+ Vs Visual by line using |v_CTRL-O| in Select mode
CTRL-V Visual blockwise
+ CTRL-Vs Visual blockwise using |v_CTRL-O| in Select mode
s Select by character
S Select by line
CTRL-S Select blockwise
- vs Visual by character using |v_CTRL-O| from
- Select mode
- Vs Visual by line using |v_CTRL-O| from Select mode
- CTRL-Vs Visual blockwise using |v_CTRL-O| from Select mode
i Insert
ic Insert mode completion |compl-generic|
ix Insert mode |i_CTRL-X| completion
R Replace |R|
Rc Replace mode completion |compl-generic|
- Rv Virtual Replace |gR|
Rx Replace mode |i_CTRL-X| completion
+ Rv Virtual Replace |gR|
+ Rvc Virtual Replace mode completion |compl-generic|
+ Rvx Virtual Replace mode |i_CTRL-X| completion
c Command-line editing
cv Vim Ex mode |gQ|
ce Normal Ex mode |Q|
@@ -8098,6 +8099,7 @@ mode([expr]) Return a string that indicates the current mode.
r? A |:confirm| query of some sort
! Shell or external command is executing
t Terminal-Job mode: keys go to the job
+
This is useful in the 'statusline' option or when used
with |remote_expr()| In most other places it always returns
"c" or "n".
diff --git a/src/misc1.c b/src/misc1.c
index 8e21f1ec91..62eba0206d 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -675,6 +675,11 @@ f_mode(typval_T *argvars, typval_T *rettv)
{
buf[0] = 'R';
buf[1] = 'v';
+
+ if (ins_compl_active())
+ buf[2] = 'c';
+ else if (ctrl_x_mode_not_defined_yet())
+ buf[2] = 'x';
}
else
{
@@ -682,6 +687,7 @@ f_mode(typval_T *argvars, typval_T *rettv)
buf[0] = 'R';
else
buf[0] = 'i';
+
if (ins_compl_active())
buf[1] = 'c';
else if (ctrl_x_mode_not_defined_yet())
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index e8762aa6ce..d060ac418f 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -785,6 +785,8 @@ func Test_mode()
exe "normal iabc\<C-X>\<C-L>\<F2>\<Esc>u"
call assert_equal('i-ic', g:current_modes)
+ exe "normal R\<F2>\<Esc>"
+ call assert_equal('R-R', g:current_modes)
" R_CTRL-P: Multiple matches
exe "normal RBa\<C-P>\<F2>\<Esc>u"
call assert_equal('R-Rc', g:current_modes)
@@ -819,6 +821,42 @@ func Test_mode()
exe "normal Rabc\<C-X>\<C-L>\<F2>\<Esc>u"
call assert_equal('R-Rc', g:current_modes)
+ exe "normal gR\<F2>\<Esc>"
+ call assert_equal('R-Rv', g:current_modes)
+ " gR_CTRL-P: Multiple matches
+ exe "normal gRBa\<C-P>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-P: Single match
+ exe "normal gRBro\<C-P>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-X
+ exe "normal gRBa\<C-X>\<F2>\<Esc>u"
+ call assert_equal('R-Rvx', g:current_modes)
+ " gR_CTRL-X CTRL-P: Multiple matches
+ exe "normal gRBa\<C-X>\<C-P>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-X CTRL-P: Single match
+ exe "normal gRBro\<C-X>\<C-P>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-X CTRL-P + CTRL-P: Single match
+ exe "normal gRBro\<C-X>\<C-P>\<C-P>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-X CTRL-L: Multiple matches
+ exe "normal gR\<C-X>\<C-L>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-X CTRL-L: Single match
+ exe "normal gRBlu\<C-X>\<C-L>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-P: No match
+ exe "normal gRCom\<C-P>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-X CTRL-P: No match
+ exe "normal gRCom\<C-X>\<C-P>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+ " gR_CTRL-X CTRL-L: No match
+ exe "normal gRabc\<C-X>\<C-L>\<F2>\<Esc>u"
+ call assert_equal('R-Rvc', g:current_modes)
+
call assert_equal('n', 0->mode())
call assert_equal('n', 1->mode())
diff --git a/src/version.c b/src/version.c
index 79f88eb721..0801704085 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3466,
+/**/
3465,
/**/
3464,