fix(mappings): use all buckets in second round of unmap (#21534)

This commit is contained in:
zeertzjq 2022-12-26 11:20:37 +08:00 committed by GitHub
parent 6f25623e79
commit 357aab4c65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 4 deletions

View File

@ -693,7 +693,7 @@ static int buf_do_map(int maptype, MapArguments *args, int mode, bool is_abbrev,
for (int round = 0; (round == 0 || maptype == MAPTYPE_UNMAP) && round <= 1 for (int round = 0; (round == 0 || maptype == MAPTYPE_UNMAP) && round <= 1
&& !did_it && !got_int; round++) { && !did_it && !got_int; round++) {
int hash_start, hash_end; int hash_start, hash_end;
if (has_lhs || is_abbrev) { if ((round == 0 && has_lhs) || is_abbrev) {
// just use one hash // just use one hash
hash_start = is_abbrev ? 0 : MAP_HASH(mode, (uint8_t)lhs[0]); hash_start = is_abbrev ? 0 : MAP_HASH(mode, (uint8_t)lhs[0]);
hash_end = hash_start + 1; hash_end = hash_start + 1;

View File

@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen')
local eq = helpers.eq local eq = helpers.eq
local exec = helpers.exec local exec = helpers.exec
local exec_capture = helpers.exec_capture
local feed = helpers.feed local feed = helpers.feed
local meths = helpers.meths local meths = helpers.meths
local clear = helpers.clear local clear = helpers.clear
@ -30,12 +31,12 @@ describe(':*map', function()
expect('-foo-') expect('-foo-')
end) end)
it('shows <nop> as mapping rhs', function() it('shows <Nop> as mapping rhs', function()
command('nmap asdf <Nop>') command('nmap asdf <Nop>')
eq([[ eq([[
n asdf <Nop>]], n asdf <Nop>]],
helpers.exec_capture('nmap asdf')) exec_capture('nmap asdf'))
end) end)
it('mappings with description can be filtered', function() it('mappings with description can be filtered', function()
@ -48,7 +49,7 @@ n asdf3 qwert
do the other thing do the other thing
n asdf1 qwert n asdf1 qwert
do the one thing]], do the one thing]],
helpers.exec_capture('filter the nmap')) exec_capture('filter the nmap'))
end) end)
it('<Plug> mappings ignore nore', function() it('<Plug> mappings ignore nore', function()
@ -84,6 +85,12 @@ n asdf1 qwert
eq(2, meths.eval('x')) eq(2, meths.eval('x'))
eq('Some te', eval("getline('.')")) eq('Some te', eval("getline('.')"))
end) end)
it(':unmap with rhs works when lhs is in another bucket #21530', function()
command('map F <Plug>Foo')
command('unmap <Plug>Foo')
eq('\nNo mapping found', exec_capture('map F'))
end)
end) end)
describe('Screen', function() describe('Screen', function()