feat(lua): add vim.keymap

This introduces two new functions `vim.keymap.set` & `vim.keymap.del`

differences compared to regular set_keymap:
- remap is used as opposite of noremap. By default it's true for <Plug> keymaps and false for others.
- rhs can be lua function.
- mode can be a list of modes.
- replace_keycodes option for lua function expr maps. (Default: true)
- handles buffer specific keymaps

Examples:
```lua
vim.keymap.set('n', 'asdf', function() print("real lua function") end)
vim.keymap.set({'n', 'v'}, '<leader>lr', vim.lsp.buf.references, {buffer=true})
vim.keymap.set('n', '<leader>w', "<cmd>w<cr>", {silent = true, buffer = 5 })
vim.keymap.set('i', '<Tab>', function()
  return vim.fn.pumvisible() == 1 and "<C-n>" or "<Tab>"
end, {expr = true})
vim.keymap.set('n', '[%', '<Plug>(MatchitNormalMultiBackward)')

vim.keymap.del('n', 'asdf')
vim.keymap.del({'n', 'i', 'v'}, '<leader>w', {buffer = 5 })
```
This commit is contained in:
shadmansaleh
2021-12-30 13:30:49 +06:00
parent 3fd454bd4a
commit 6d41f65aa4
5 changed files with 297 additions and 0 deletions

View File

@@ -2298,3 +2298,82 @@ describe('lua: require("mod") from packages', function()
eq('I am fancy_z.lua', exec_lua [[ return require'fancy_z' ]])
end)
end)
describe('vim.keymap', function()
it('can make a mapping', function()
eq(0, exec_lua [[
GlobalCount = 0
vim.keymap.set('n', 'asdf', function() GlobalCount = GlobalCount + 1 end)
return GlobalCount
]])
feed('asdf\n')
eq(1, exec_lua[[return GlobalCount]])
end)
it('can make an expr mapping', function()
exec_lua [[
vim.keymap.set('n', 'aa', function() return ':lua SomeValue = 99<cr>' end, {expr = true})
]]
feed('aa')
eq(99, exec_lua[[return SomeValue]])
end)
it('can overwrite a mapping', function()
eq(0, exec_lua [[
GlobalCount = 0
vim.keymap.set('n', 'asdf', function() GlobalCount = GlobalCount + 1 end)
return GlobalCount
]])
feed('asdf\n')
eq(1, exec_lua[[return GlobalCount]])
exec_lua [[
vim.keymap.set('n', 'asdf', function() GlobalCount = GlobalCount - 1 end)
]]
feed('asdf\n')
eq(0, exec_lua[[return GlobalCount]])
end)
it('can unmap a mapping', function()
eq(0, exec_lua [[
GlobalCount = 0
vim.keymap.set('n', 'asdf', function() GlobalCount = GlobalCount + 1 end)
return GlobalCount
]])
feed('asdf\n')
eq(1, exec_lua[[return GlobalCount]])
exec_lua [[
vim.keymap.del('n', 'asdf')
]]
feed('asdf\n')
eq(1, exec_lua[[return GlobalCount]])
eq('\nNo mapping found', helpers.exec_capture('nmap asdf'))
end)
it('can do <Plug> mappings', function()
eq(0, exec_lua [[
GlobalCount = 0
vim.keymap.set('n', '<plug>(asdf)', function() GlobalCount = GlobalCount + 1 end)
vim.keymap.set('n', 'ww', '<plug>(asdf)')
return GlobalCount
]])
feed('ww\n')
eq(1, exec_lua[[return GlobalCount]])
end)
end)