neovim/lua/mappings.lua

257 lines
9.7 KiB
Lua

-- General
vim.g.mapleader = " "
-- Buffer functions
vim.api.nvim_set_keymap("n", "<leader>bn", ":bn<CR>", { noremap = true, silent = true }) -- Next buffer
vim.api.nvim_set_keymap("n", "<leader>bp", ":bp<CR>", { noremap = true, silent = true }) -- Previous buffer
-- Window Functions using Leader W J/K/H/L
vim.api.nvim_set_keymap("n", "<leader>wj", "<C-w>j", { noremap = true, silent = true }) -- Move to bottom window
vim.api.nvim_set_keymap("n", "<leader>wk", "<C-w>k", { noremap = true, silent = true }) -- Move to top window
vim.api.nvim_set_keymap("n", "<leader>wh", "<C-w>h", { noremap = true, silent = true }) -- Move to left window
vim.api.nvim_set_keymap("n", "<leader>wl", "<C-w>l", { noremap = true, silent = true }) -- Move to right window
vim.api.nvim_set_keymap("n", "<leader>`", ":b#<CR>", { noremap = true, silent = true }) -- Switch to last window
vim.api.nvim_set_keymap("n", "<leader>wc", "<C-w>q", { noremap = true, silent = true }) -- Close Window
vim.api.nvim_set_keymap("n", "<leader>wp", "<C-w>p", { noremap = true, silent = true }) -- Move to previous window
-- Navigate to window using Leader w {number}
vim.api.nvim_set_keymap("n", "<leader>w1", "1<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 1
vim.api.nvim_set_keymap("n", "<leader>w2", "2<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 2
vim.api.nvim_set_keymap("n", "<leader>w3", "3<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 3
vim.api.nvim_set_keymap("n", "<leader>w4", "4<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 4
vim.api.nvim_set_keymap("n", "<leader>w5", "5<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 5
vim.api.nvim_set_keymap("n", "<leader>w6", "6<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 6
vim.api.nvim_set_keymap("n", "<leader>w7", "7<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 7
vim.api.nvim_set_keymap("n", "<leader>w8", "8<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 8
vim.api.nvim_set_keymap("n", "<leader>w9", "9<C-w><C-w>", { noremap = true, silent = true }) -- Move to window 9
-- Windows Move using Leader W J/K/H/L
vim.api.nvim_set_keymap("n", "<leader>Wj", "<C-w>J", { noremap = true, silent = true }) -- Move to bottom window
vim.api.nvim_set_keymap("n", "<leader>Wk", "<C-w>K", { noremap = true, silent = true }) -- Move to top window
vim.api.nvim_set_keymap("n", "<leader>Wh", "<C-w>H", { noremap = true, silent = true }) -- Move to left window
vim.api.nvim_set_keymap("n", "<leader>Wl", "<C-w>L", { noremap = true, silent = true }) -- Move to right window
-- Window Splits
vim.api.nvim_set_keymap("n", "<leader>wv", ":vsplit<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>ws", ":split<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>w=", "<C-w>=", { noremap = true, silent = true }) -- Balance windows
-- Tabs
vim.api.nvim_set_keymap("n", "<leader><TAB>n", ":tabnew<CR>", { noremap = true, silent = true })
-- Neogit
vim.api.nvim_set_keymap("n", "<leader>gg", "<cmd>Neogit<CR>", { noremap = true, silent = true })
-- Snacks
vim.keymap.set('n', '<leader>bd', function() Snacks.bufdelete() end, { desc = "Close buffer" })
vim.keymap.set('n', '<leader>.', function() Snacks.picker.files() end, { desc = "Fuzzy file picker" })
vim.keymap.set('n', '<leader>,', function() Snacks.picker.buffers() end, { desc = "Buffer picker" })
vim.keymap.set('n', '<leader>/', function() Snacks.picker.grep() end, { desc = "Grep" })
vim.keymap.set('n', '<leader>\'', function() Snacks.picker.resume() end, { desc = "Resume last picker" })
vim.keymap.set('n', '<C-n>', function() Snacks.explorer() end, { desc = "File explorer" })
vim.keymap.set('n', '<leader>u', function() Snacks.picker.undo() end, { desc = "Undo history" })
vim.keymap.set('n', '<leader>fr', function() Snacks.picker.recent() end, { desc = "Recent files" })
-- telescope
vim.api.nvim_set_keymap("n", "<leader>fg", "<cmd>Telescope git_files<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>fs", "<cmd>Telescope lsp_document_symbols<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>fe", "<cmd>Telescope lsp_references<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>fd", "<cmd>Telescope lsp_definitions<CR>", { noremap = true, silent = true })
-- LSP
vim.keymap.set(
'n',
'<leader>e',
vim.diagnostic.open_float,
{
desc = "Open diagnostics",
}
)
vim.keymap.set(
'n',
'[d',
vim.diagnostic.goto_prev,
{
desc = "Go to previous diagnostic",
}
)
vim.keymap.set(
'n',
']d',
vim.diagnostic.goto_next,
{
desc = "Go to next diagnostic",
}
)
vim.keymap.set(
'n',
'<leader>q',
vim.diagnostic.setloclist,
{
desc = "Set loclist",
}
)
vim.keymap.set(
'n',
'<leader>lh',
function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) end,
{
desc = "Toggle inlay hints",
}
)
vim.keymap.set(
{ 'n', 'x' },
'<leader>la',
'<cmd>lua require("fastaction").code_action()<CR>',
{
buffer = bufnr,
}
)
-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set({ 'n', 'i' }, '<C-k>', vim.lsp.buf.signature_help, opts)
-- vim.keymap.set('n', '<leader>wa', vim.lsp.buf.add_workleader_folder, opts)
-- vim.keymap.set('n', '<leader>wr', vim.lsp.buf.remove_workleader_folder, opts)
-- vim.keymap.set('n', '<leader>wl', function()
-- print(vim.inspect(vim.lsp.buf.list_workleader_folders()))
-- end, opts)
vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, opts)
-- vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
-- vim.keymap.set({ 'n', 'v' }, '<leader>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<leader>lf', function()
vim.lsp.buf.format { async = true }
end, opts)
end,
})
-- LSP Diagnostics
vim.keymap.set(
"n",
"<leader>dn",
vim.diagnostic.goto_next,
{
desc = "Go to next diagnostic",
noremap = true,
silent = true,
}
)
vim.keymap.set(
"n",
"<leader>dp",
vim.diagnostic.goto_prev,
{
desc = "Go to previous diagnostic",
noremap = true,
silent = true,
}
)
vim.keymap.set(
"n",
"<leader>dd",
vim.diagnostic.open_float,
{
desc = "Open diagnostics",
noremap = true,
silent = true,
}
)
-- Lspsaga
vim.api.nvim_set_keymap("n", "<leader>li", "<cmd>Lspsaga incoming_calls<CR>", { noremap = true, silent = true })
vim.keymap.set(
"n",
"<leader>aa",
"<cmd>execute 'Lspsaga outline' | set relativenumber<CR>",
{ noremap = true, silent = true }
)
vim.api.nvim_set_keymap("n", "<leader>lo", "<cmd>Lspsaga outgoing_calls<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "gp", "<cmd>Lspsaga peek_type_definition<CR>", { noremap = true })
-- inc-rename
vim.keymap.set(
"n",
"<leader>lr",
":IncRename ",
{
desc = "Symbol rename",
noremap = true,
silent = true,
}
)
-- Trouble
vim.api.nvim_set_keymap(
"n",
"<leader>tb",
"<cmd>Trouble diagnostics toggle filter.buf=0<CR>",
{
desc = "Trouble: Toggle diagnostics for the current buffer",
noremap = true,
silent = true,
}
)
-- todo
vim.api.nvim_set_keymap("n", "<leader>tf", "<cmd>TodoTelescope<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>tl", "<cmd>TodoTrouble toggle<CR>", { noremap = true, silent = true })
-- auto session
vim.api.nvim_set_keymap("n", "<leader>ss", "<cmd>SessionSave<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>sr", "<cmd>SessionRestore<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>sd", "<cmd>SessionDelete<CR>", { noremap = true, silent = true })
-- terminal
vim.api.nvim_set_keymap("n", "<leader>tn", "<cmd>ToggleTerm direction=horizontal size=15<CR>",
{ noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<leader>tv", "<cmd>ToggleTerm direction=vertical size=70<CR>",
{ noremap = true, silent = true })
function _G.set_terminal_keymaps()
local opts = { buffer = 0 }
vim.keymap.set('t', '<esc>', [[<C-\><C-n>]], opts) -- Exit to normal mode
vim.keymap.set('t', 'jk', [[<C-\><C-n>]], opts)
vim.keymap.set('t', '<C-h>', [[<Cmd>wincmd h<CR>]], opts)
vim.keymap.set('t', '<C-j>', [[<Cmd>wincmd j<CR>]], opts)
vim.keymap.set('t', '<C-k>', [[<Cmd>wincmd k<CR>]], opts)
vim.keymap.set('t', '<C-l>', [[<Cmd>wincmd l<CR>]], opts)
vim.keymap.set('t', '<C-w>', [[<C-\><C-n><C-w>]], opts)
end
vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()')
-- oil
vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory" })
vim.keymap.set("n", "<leader>-", "<CMD>FuzzyOil<CR>", { desc = "Fuzzy find directory" })
-- maximize.nvim
vim.keymap.set('n', '<Leader>z', "<Cmd>lua require('maximize').toggle()<CR>")
-- TODO: Test cleanup of mappings
-- Normal mode commands
local normal_mode_commands = {
-- Bookmarks.nvim
BookmarksMark = "mm",
BookmarksGoto = "mo",
BookmarksAddList = "ma",
BookmarksSetActiveList = "ml",
}
-- Create normal mode mappings
for command, key in pairs(normal_mode_commands) do
vim.api.nvim_set_keymap("n", key, ":" .. command .. "<CR>", { noremap = true, silent = true })
end