mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
patch 8.2.4498: using <Plug> with "noremap" does not work
Problem: Using <Plug> with "noremap" does not work. Solution: Always remap <Plug>. (closes #9879, closes #9789)
This commit is contained in:
@@ -80,6 +80,8 @@ modes.
|
|||||||
where the map command applies. Disallow mapping of
|
where the map command applies. Disallow mapping of
|
||||||
{rhs}, to avoid nested and recursive mappings. Often
|
{rhs}, to avoid nested and recursive mappings. Often
|
||||||
used to redefine a command.
|
used to redefine a command.
|
||||||
|
Note: When <Plug> appears in the {rhs} this part is
|
||||||
|
always applied even if remapping is disallowed.
|
||||||
|
|
||||||
|
|
||||||
:unm[ap] {lhs} |mapmode-nvo| *:unm* *:unmap*
|
:unm[ap] {lhs} |mapmode-nvo| *:unm* *:unmap*
|
||||||
|
@@ -2424,6 +2424,13 @@ handle_mapping(
|
|||||||
int keylen = *keylenp;
|
int keylen = *keylenp;
|
||||||
int i;
|
int i;
|
||||||
int local_State = get_real_state();
|
int local_State = get_real_state();
|
||||||
|
int is_plug_map = FALSE;
|
||||||
|
|
||||||
|
// If typehead starts with <Plug> then remap, even for a "noremap" mapping.
|
||||||
|
if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
|
||||||
|
&& typebuf.tb_buf[typebuf.tb_off + 1] == KS_EXTRA
|
||||||
|
&& typebuf.tb_buf[typebuf.tb_off + 2] == KE_PLUG)
|
||||||
|
is_plug_map = TRUE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for a mappable key sequence.
|
* Check for a mappable key sequence.
|
||||||
@@ -2441,7 +2448,7 @@ handle_mapping(
|
|||||||
tb_c1 = typebuf.tb_buf[typebuf.tb_off];
|
tb_c1 = typebuf.tb_buf[typebuf.tb_off];
|
||||||
if (no_mapping == 0 && is_maphash_valid()
|
if (no_mapping == 0 && is_maphash_valid()
|
||||||
&& (no_zero_mapping == 0 || tb_c1 != '0')
|
&& (no_zero_mapping == 0 || tb_c1 != '0')
|
||||||
&& (typebuf.tb_maplen == 0
|
&& (typebuf.tb_maplen == 0 || is_plug_map
|
||||||
|| (p_remap
|
|| (p_remap
|
||||||
&& (typebuf.tb_noremap[typebuf.tb_off]
|
&& (typebuf.tb_noremap[typebuf.tb_off]
|
||||||
& (RM_NONE|RM_ABBR)) == 0))
|
& (RM_NONE|RM_ABBR)) == 0))
|
||||||
@@ -2562,7 +2569,7 @@ handle_mapping(
|
|||||||
for (n = mlen; --n >= 0; )
|
for (n = mlen; --n >= 0; )
|
||||||
if (*s++ & (RM_NONE|RM_ABBR))
|
if (*s++ & (RM_NONE|RM_ABBR))
|
||||||
break;
|
break;
|
||||||
if (n >= 0)
|
if (!is_plug_map && n >= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (keylen > typebuf.tb_len)
|
if (keylen > typebuf.tb_len)
|
||||||
|
@@ -1536,4 +1536,34 @@ func Test_abbreviate_latin1_encoding()
|
|||||||
set encoding=utf-8
|
set encoding=utf-8
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for <Plug> always being mapped, even when used with "noremap".
|
||||||
|
func Test_plug_remap()
|
||||||
|
let g:foo = 0
|
||||||
|
nnoremap <Plug>(Increase_x) <Cmd>let g:foo += 1<CR>
|
||||||
|
nmap <F2> <Plug>(Increase_x)
|
||||||
|
nnoremap <F3> <Plug>(Increase_x)
|
||||||
|
call feedkeys("\<F2>", 'xt')
|
||||||
|
call assert_equal(1, g:foo)
|
||||||
|
call feedkeys("\<F3>", 'xt')
|
||||||
|
call assert_equal(2, g:foo)
|
||||||
|
nnoremap x <Nop>
|
||||||
|
nmap <F4> x<Plug>(Increase_x)x
|
||||||
|
nnoremap <F5> x<Plug>(Increase_x)x
|
||||||
|
call setline(1, 'Some text')
|
||||||
|
normal! gg$
|
||||||
|
call feedkeys("\<F4>", 'xt')
|
||||||
|
call assert_equal(3, g:foo)
|
||||||
|
call assert_equal('Some text', getline(1))
|
||||||
|
call feedkeys("\<F5>", 'xt')
|
||||||
|
call assert_equal(4, g:foo)
|
||||||
|
call assert_equal('Some te', getline(1))
|
||||||
|
nunmap <Plug>(Increase_x)
|
||||||
|
nunmap <F2>
|
||||||
|
nunmap <F3>
|
||||||
|
nunmap <F4>
|
||||||
|
nunmap <F5>
|
||||||
|
unlet g:foo
|
||||||
|
%bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4498,
|
||||||
/**/
|
/**/
|
||||||
4497,
|
4497,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user