Keybindings
See the keybinds overview for most commonly used keybinds.
If you want to (re)map a keybinding that starts with <leader>, use Whichkey Bindings.
If the bindings are LSP (intellisense) related, use LSP Bindings.
In all other cases, use NeoVim mappings
Leader Key
The default leader key is Space. This can be changed with the following
lvim.leader = "space"
Listing what is mapped
Use <Leader>sk to view different keybinding currently set.
To see if a particular key has already been bound:
:verbose map <TAB>
- :nmap for normal mode mappings
- :vmap for visual mode mappings
- :imap for insert mode mappings
Or just list every mapping
:map
NeoVim mappings
(Re)mapping keys
To modify or add a keymapping:
-- X closes a buffer
lvim.keys.normal_mode["<S-x>"] = ":BufferKill<CR>"
-- Centers cursor when moving 1/2 page down
lvim.keys.normal_mode["<C-d>"] = "<C-d>zz"
Removing default mappings
To remove keymappings set by LunarVim:
lvim.keys.normal_mode["<C-h>"] = false
lvim.keys.normal_mode["<C-j>"] = false
lvim.keys.normal_mode["<C-k>"] = false
lvim.keys.normal_mode["<C-l>"] = false
LSP Bindings
To modify your LSP keybindings use lvim.lsp.buffer_mappings.[normal|visual|insert]_mode.
(Re)map a key
Map your own functionality
lvim.lsp.buffer_mappings.normal_mode['H'] = { vim.lsp.buf.hover, "Show documentation" }
Or map default functionality to a different key
lvim.lsp.buffer_mappings.normal_mode['gk'] = lvim.lsp.buffer_mappings.normal_mode['K']
Remove a binding
LSP bindings take precedence over regular keybindings. So in order to use a key for a regular binding, we have to remove it first
lvim.lsp.buffer_mappings.normal_mode['K'] = nil
lvim.keys.normal_mode['K'] = "<Cmd>echo Okay!<CR>"
Whichkey Bindings
To add or remap keybindings for whichkey use lvim.builtin.which_key.mappings.
The leader key is already included.
Single mapping
Map a single key.
lvim.builtin.which_key.mappings["P"] = {
"<cmd>lua require'telescope'.extensions.project.project{}<CR>", "Projects"
}
As stated above, the leader key is included. So for the above example, the keybinding becomes <leader>P
Removing a single mapping
Remove a single Whichkey keybind
lvim.builtin.which_key.mappings['w'] = {}
Adding a key to an existing menu/submenu.
lvim.builtin.which_key.mappings["tP"] = {
"<cmd>lua require'telescope'.extensions.project.project{}<CR>", "Projects"
}
Submenu mapping
Map a group of keys. Definitions would be triggered by pressing <Leader>td. The name for this menu would appear as Trouble.
lvim.builtin.which_key.mappings["t"] = {
name = "Trouble",
r = { "<cmd>Trouble lsp_references<cr>", "References" },
f = { "<cmd>Trouble lsp_definitions<cr>", "Definitions" },
d = { "<cmd>Trouble lsp_document_diagnostics<cr>", "Diagnostics" },
q = { "<cmd>Trouble quickfix<cr>", "QuickFix" },
l = { "<cmd>Trouble loclist<cr>", "LocationList" },
w = { "<cmd>Trouble lsp_workspace_diagnostics<cr>", "Diagnostics" },
}
Replace all whichkey mappings
To clear all whichkey bindings and replace all mappings with your own, use this form.
lvim.builtin.which_key.mappings = {
["c"] = { "<cmd>BufferClose!<CR>", "Close Buffer" },
["e"] = { "<cmd>NvimTreeToggle<CR>", "Explorer" },
["h"] = { '<cmd>let @/=""<CR>', "No Highlight" },
p = {
name = "Plugins",
i = { "<cmd>Lazy install<cr>", "Install" },
s = { "<cmd>Lazy sync<cr>", "Sync" },
S = { "<cmd>Lazy clear<cr>", "Status" },
u = { "<cmd>Lazy update<cr>", "Update" },
},
}
toggleterm (terminal) mappings
To change the terminal mapping:
lvim.builtin.terminal.open_mapping = "<c-t>"