aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-12-26 11:20:37 +0800
committerGitHub <noreply@github.com>2022-12-26 11:20:37 +0800
commit357aab4c65c49a924481a67e17a10bd04c334ab9 (patch)
treef800d7e1836a660c508e8888976937fbf860f066
parent6f25623e793e058c78481b7fb7a42eeff642694b (diff)
downloadrneovim-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.c2
-rw-r--r--test/functional/ex_cmds/map_spec.lua13
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()