feat(mappings): do not simplify the rhs of a mapping

This commit is contained in:
zeertzjq
2022-04-29 21:00:58 +08:00
parent 98f62a2cfa
commit 7ac5359143
3 changed files with 9 additions and 3 deletions

View File

@@ -366,8 +366,9 @@ Macro/|recording| behavior
the results of keys from 'keymap'. the results of keys from 'keymap'.
Mappings: Mappings:
Creating a mapping for a simplifiable key (e.g. <C-I>) doesn't replace an - Creating a mapping for a simplifiable key (e.g. <C-I>) doesn't replace an
existing mapping for its simplified form (e.g. <Tab>). existing mapping for its simplified form (e.g. <Tab>).
- The rhs of a mapping is not simplified when it is defined.
Motion: Motion:
The |jumplist| avoids useless/phantom jumps. The |jumplist| avoids useless/phantom jumps.

View File

@@ -2885,8 +2885,8 @@ void set_maparg_lhs_rhs(const char_u *const orig_lhs, const size_t orig_lhs_len,
mapargs->rhs_len = 0; mapargs->rhs_len = 0;
mapargs->rhs_is_noop = true; mapargs->rhs_is_noop = true;
} else { } else {
replaced = replace_termcodes(orig_rhs, orig_rhs_len, &rhs_buf, REPTERM_DO_LT, NULL, replaced = replace_termcodes(orig_rhs, orig_rhs_len, &rhs_buf,
cpo_flags); REPTERM_DO_LT | REPTERM_NO_SIMPLIFY, NULL, cpo_flags);
mapargs->rhs_len = STRLEN(replaced); mapargs->rhs_len = STRLEN(replaced);
mapargs->rhs_is_noop = false; mapargs->rhs_is_noop = false;
mapargs->rhs = xcalloc(mapargs->rhs_len + 1, sizeof(char_u)); mapargs->rhs = xcalloc(mapargs->rhs_len + 1, sizeof(char_u));

View File

@@ -313,6 +313,11 @@ it('unsimplified mapping works when there was a partial match vim-patch:8.2.4504
expect('xb') expect('xb')
end) end)
it('rhs of a mapping is not simplified', function()
command('nnoremap <Plug>foo <C-J>')
eq('<C-J>', funcs.maparg('<Plug>foo'))
end)
describe('input non-printable chars', function() describe('input non-printable chars', function()
after_each(function() after_each(function()
os.remove('Xtest-overwrite') os.remove('Xtest-overwrite')