Hello, I really like the idea of this plugin and have something similar implemented in my dotfiles:
local escape_cmd = function(string)
return string:gsub("'", "\\'"):gsub('"', '\\"'):gsub('\\[', '\\['):gsub('\\]', '\\]'):gsub('<', '<lt>')
end
local bounded_funcs = 'global_bounded_funcs_namespace'
_G[bounded_funcs] = {}
for _, mode in ipairs { '', 'n', 'i', 'v', 't', 's' } do
_G[mode .. 'noremap'] = function(input, output)
if type(output) == 'function' then
local func_name = mode .. '_' .. input
local func_name_escaped = escape_cmd(func_name)
_G[bounded_funcs][func_name] = output
local lua_cmd = ':lua ' .. bounded_funcs .. "['" .. func_name_escaped .. "']()<cr>"
vim.api.nvim_set_keymap(mode, input, lua_cmd, { noremap = true, silent = true })
elseif type(output) == 'string' then
vim.api.nvim_set_keymap(mode, input, output, { noremap = true, silent = true })
else
error(mode .. 'noremap' .. ' expects a string or callback', 2)
end
end
end
This generates the [nivts]noremap family of functions which have two arguments. The first argument is the input keybinding and the second is either a string which can be a vim command OR it can be lua callback. This allows me to make the following types of mappings:
- Mappings where the second argument is a string.
nnoremap('<leader>a', ':echo "using lua string"')
- Mappings where the second argument is an anonymous function.
nnoremap('<leader>b', function() print('using anonymous function') end)
- Mappings where the second argument is a named function (useful for mapping functions provided by other plugins).
my_func = function() print('using named function') end
nnoremap('<leader>c', my_func)
I tried switching to mapx.nvim, mainly for the which-key.nvim integration and while example 1 and 2 work I'm not able to bind named functions. I know I can wrap the functions in an anonymous function but I'm just wondering why it doesn't work and what mistake I'm making.
Hello, I really like the idea of this plugin and have something similar implemented in my dotfiles:
This generates the [nivts]noremap family of functions which have two arguments. The first argument is the input keybinding and the second is either a string which can be a vim command OR it can be lua callback. This allows me to make the following types of mappings:
I tried switching to mapx.nvim, mainly for the which-key.nvim integration and while example 1 and 2 work I'm not able to bind named functions. I know I can wrap the functions in an anonymous function but I'm just wondering why it doesn't work and what mistake I'm making.