]> granicus.if.org Git - vim/commitdiff
patch 8.2.3466: completion submode not indicated for virtual replace v8.2.3466
authorzeertzjq <zeertzjq@outlook.com>
Sun, 3 Oct 2021 14:19:14 +0000 (15:19 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 3 Oct 2021 14:19:14 +0000 (15:19 +0100)
Problem:    Completion submode not indicated for virtual replace.
Solution:   Add submode to "Rv". (closes #8945)

runtime/doc/eval.txt
src/misc1.c
src/testdir/test_functions.vim
src/version.c

index 588f51155355d3f4ba9c6e4133acf732cd7ddfbf..c3d39d5d6dc33a30eea7a8cc2568bfab62835d12 100644 (file)
@@ -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".
index 8e21f1ec91ba4302c062a87d49169f8e23e00ff9..62eba0206db212685ebc070375a034d1153d87e4 100644 (file)
@@ -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())
index e8762aa6ced5c0a0eb30d5a41742b8a06fe2eeba..d060ac418f94a3ba2f26db6bc62b84529fdb5cc8 100644 (file)
@@ -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())
 
index 79f88eb72154d7be30ecf5e43dfbac238916cd12..080170408571e562704aec3c4627cc92c1650fb3 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3466,
 /**/
     3465,
 /**/