Problem: Cannot cancel "gr" with Esc.
Solution: Make "gr<Esc>" do nothing. (closes #12064)
#endif
static int ins_start_select(int c);
static void ins_insert(int replaceState);
-static void ins_ctrl_o(int cmdchar);
+static void ins_ctrl_o(void);
static void ins_shift(int c, int lastc);
static void ins_del(void);
static int ins_bs(int c, int mode, int *inserted_space_p);
/*
* Main loop in Insert mode: repeat until Insert mode is left.
*/
- int did_loop = FALSE;
- for (;; did_loop = TRUE)
+ for (;;)
{
#ifdef FEAT_RIGHTLEFT
if (!revins_legal)
if (cmdchar == K_PS)
// Got here from normal mode when bracketed paste started.
c = K_PS;
- else if (cmdchar == 'v' && did_loop && count <= 0)
- c = ESC; // in case the stuffed Esc was consumed already
else
do
{
{
if (c == Ctrl_O)
{
- ins_ctrl_o(cmdchar);
+ ins_ctrl_o();
ins_at_eol = FALSE; // cursor keeps its column
nomove = TRUE;
}
#endif
if (echeck_abbr(Ctrl_O + ABBR_OFF))
break;
- ins_ctrl_o(cmdchar);
+ ins_ctrl_o();
// don't move the cursor left when 'virtualedit' has "onemore".
if (get_ve_flags() & VE_ONEMORE)
* Pressed CTRL-O in Insert mode.
*/
static void
-ins_ctrl_o(int cmdchar)
+ins_ctrl_o(void)
{
- if (cmdchar == 'v')
- return; // abort replacing one char for gr CTRL-O
if (State & VREPLACE_FLAG)
restart_edit = 'V';
else if (State & REPLACE_FLAG)
cap->nchar = cap->extra_char;
idx = find_command(cap->cmdchar);
}
- else if ((cap->nchar == 'n' || cap->nchar == 'N') && cap->cmdchar == 'g')
+ else if ((cap->nchar == 'n' || cap->nchar == 'N')
+ && cap->cmdchar == 'g')
cap->oap->op_type = get_op_type(*cp, NUL);
else if (*cp == Ctrl_BSL)
{
return;
}
- if (checkclearopq(cap->oap))
+ if (checkclearopq(cap->oap) || cap->extra_char == ESC)
return;
if (!curbuf->b_p_ma)
call assert_equal([0, 3, 7, 0], getpos('.'))
call feedkeys("i\<c-g>j\<esc>", 'tnix')
call assert_equal([0, 3, 6, 0], getpos('.'))
+ call assert_nobeep("normal! i\<c-g>\<esc>")
bw!
endfunc
bwipe!
endfunc
-" Test "gr" followed by an Insert mode command does get out of Insert mode.
-func Test_edit_gr_special()
- enew
- call setline(1, ['abcdef', 'xxxxxx'])
- exe "normal! gr\<C-O>lx"
- call assert_equal("\<C-O>def", getline(1))
-
- call setline(1, 'abcdef')
- exe "normal! 0gr\<C-G>lx"
- call assert_equal("\<C-G>def", getline(1))
-
- bwipe!
-endfunc
-
" Weird long file name was going over the end of NameBuff
func Test_edit_overlong_file_name()
CheckUnix
endfunc
" Test for the gr (virtual replace) command
-" Test for the bug fixed by 7.4.387
func Test_gr_command()
enew!
+ " Test for the bug fixed by 7.4.387
let save_cpo = &cpo
call append(0, ['First line', 'Second line', 'Third line'])
exe "normal i\<C-G>u"
normal 4gro
call assert_equal('ooooecond line', getline(2))
let &cpo = save_cpo
+
normal! ggvegrx
call assert_equal('xxxxx line', getline(1))
exe "normal! gggr\<C-V>122"
call assert_equal('zxxxx line', getline(1))
+
set virtualedit=all
normal! 15|grl
call assert_equal('zxxxx line l', getline(1))
set nomodifiable
call assert_fails('normal! grx', 'E21:')
call assert_fails('normal! gRx', 'E21:')
+ call assert_nobeep("normal! gr\<Esc>")
set modifiable&
- enew!
+
+ call assert_nobeep("normal! gr\<Esc>")
+ call assert_beeps("normal! cgr\<Esc>")
+
+ call assert_equal('zxxxx line l', getline(1))
+ exe "normal! 2|gr\<C-V>\<Esc>"
+ call assert_equal("z\<Esc>xx line l", getline(1))
+
+ call setline(1, 'abcdef')
+ exe "normal! 0gr\<C-O>lx"
+ call assert_equal("\<C-O>def", getline(1))
+
+ call setline(1, 'abcdef')
+ exe "normal! 0gr\<C-G>lx"
+ call assert_equal("\<C-G>def", getline(1))
+
+ bwipe!
endfunc
func Test_nv_hat_count()
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1356,
/**/
1355,
/**/