diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-12-26 11:20:37 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-26 11:20:37 +0800 |
commit | 357aab4c65c49a924481a67e17a10bd04c334ab9 (patch) | |
tree | f800d7e1836a660c508e8888976937fbf860f066 | |
parent | 6f25623e793e058c78481b7fb7a42eeff642694b (diff) | |
download | rneovim-357aab4c65c49a924481a67e17a10bd04c334ab9.tar.gz rneovim-357aab4c65c49a924481a67e17a10bd04c334ab9.tar.bz2 rneovim-357aab4c65c49a924481a67e17a10bd04c334ab9.zip |
fix(mappings): use all buckets in second round of unmap (#21534)
-rw-r--r-- | src/nvim/mapping.c | 2 | ||||
-rw-r--r-- | test/functional/ex_cmds/map_spec.lua | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/nvim/mapping.c b/src/nvim/mapping.c index a412fd05b2..5fffc72056 100644 --- a/src/nvim/mapping.c +++ b/src/nvim/mapping.c @@ -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 && !did_it && !got_int; round++) { int hash_start, hash_end; - if (has_lhs || is_abbrev) { + if ((round == 0 && has_lhs) || is_abbrev) { // just use one hash hash_start = is_abbrev ? 0 : MAP_HASH(mode, (uint8_t)lhs[0]); hash_end = hash_start + 1; diff --git a/test/functional/ex_cmds/map_spec.lua b/test/functional/ex_cmds/map_spec.lua index dd9f7027cf..ec912053b2 100644 --- a/test/functional/ex_cmds/map_spec.lua +++ b/test/functional/ex_cmds/map_spec.lua @@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen') local eq = helpers.eq local exec = helpers.exec +local exec_capture = helpers.exec_capture local feed = helpers.feed local meths = helpers.meths local clear = helpers.clear @@ -30,12 +31,12 @@ describe(':*map', function() expect('-foo-') end) - it('shows <nop> as mapping rhs', function() + it('shows <Nop> as mapping rhs', function() command('nmap asdf <Nop>') eq([[ n asdf <Nop>]], - helpers.exec_capture('nmap asdf')) + exec_capture('nmap asdf')) end) it('mappings with description can be filtered', function() @@ -48,7 +49,7 @@ n asdf3 qwert do the other thing n asdf1 qwert do the one thing]], - helpers.exec_capture('filter the nmap')) + exec_capture('filter the nmap')) end) it('<Plug> mappings ignore nore', function() @@ -84,6 +85,12 @@ n asdf1 qwert eq(2, meths.eval('x')) eq('Some te', eval("getline('.')")) 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) describe('Screen', function() |