-- General vim.g.mapleader = " " -- Buffer functions vim.api.nvim_set_keymap("n", "bn", ":bn", { noremap = true, silent = true }) -- Next buffer vim.api.nvim_set_keymap("n", "bp", ":bp", { noremap = true, silent = true }) -- Previous buffer -- Window Functions using Leader W J/K/H/L vim.api.nvim_set_keymap("n", "wj", "j", { noremap = true, silent = true }) -- Move to bottom window vim.api.nvim_set_keymap("n", "wk", "k", { noremap = true, silent = true }) -- Move to top window vim.api.nvim_set_keymap("n", "wh", "h", { noremap = true, silent = true }) -- Move to left window vim.api.nvim_set_keymap("n", "wl", "l", { noremap = true, silent = true }) -- Move to right window vim.api.nvim_set_keymap("n", "`", ":b#", { noremap = true, silent = true }) -- Switch to last window vim.api.nvim_set_keymap("n", "wc", "q", { noremap = true, silent = true }) -- Close Window vim.api.nvim_set_keymap("n", "wp", "p", { noremap = true, silent = true }) -- Move to previous window -- Navigate to window using Leader w {number} vim.api.nvim_set_keymap("n", "w1", "1", { noremap = true, silent = true }) -- Move to window 1 vim.api.nvim_set_keymap("n", "w2", "2", { noremap = true, silent = true }) -- Move to window 2 vim.api.nvim_set_keymap("n", "w3", "3", { noremap = true, silent = true }) -- Move to window 3 vim.api.nvim_set_keymap("n", "w4", "4", { noremap = true, silent = true }) -- Move to window 4 vim.api.nvim_set_keymap("n", "w5", "5", { noremap = true, silent = true }) -- Move to window 5 vim.api.nvim_set_keymap("n", "w6", "6", { noremap = true, silent = true }) -- Move to window 6 vim.api.nvim_set_keymap("n", "w7", "7", { noremap = true, silent = true }) -- Move to window 7 vim.api.nvim_set_keymap("n", "w8", "8", { noremap = true, silent = true }) -- Move to window 8 vim.api.nvim_set_keymap("n", "w9", "9", { noremap = true, silent = true }) -- Move to window 9 -- Windows Move using Leader W J/K/H/L vim.api.nvim_set_keymap("n", "Wj", "J", { noremap = true, silent = true }) -- Move to bottom window vim.api.nvim_set_keymap("n", "Wk", "K", { noremap = true, silent = true }) -- Move to top window vim.api.nvim_set_keymap("n", "Wh", "H", { noremap = true, silent = true }) -- Move to left window vim.api.nvim_set_keymap("n", "Wl", "L", { noremap = true, silent = true }) -- Move to right window -- Window Splits vim.api.nvim_set_keymap("n", "wv", ":vsplit", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "ws", ":split", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "w=", "=", { noremap = true, silent = true }) -- Balance windows -- Tabs vim.api.nvim_set_keymap("n", "n", ":tabnew", { noremap = true, silent = true }) -- Neogit vim.api.nvim_set_keymap("n", "gg", "Neogit", { noremap = true, silent = true }) -- Snacks vim.keymap.set('n', 'bd', function() Snacks.bufdelete() end, { desc = "Close buffer" }) vim.keymap.set('n', '.', function() Snacks.picker.files() end, { desc = "Fuzzy file picker" }) vim.keymap.set('n', ',', function() Snacks.picker.buffers() end, { desc = "Buffer picker" }) vim.keymap.set('n', '/', function() Snacks.picker.grep() end, { desc = "Grep" }) vim.keymap.set('n', '\'', function() Snacks.picker.resume() end, { desc = "Resume last picker" }) vim.keymap.set('n', '', function() Snacks.explorer() end, { desc = "File explorer" }) vim.keymap.set('n', 'u', function() Snacks.picker.undo() end, { desc = "Undo history" }) vim.keymap.set('n', 'fr', function() Snacks.picker.recent() end, { desc = "Recent files" }) -- telescope vim.api.nvim_set_keymap("n", "fg", "Telescope git_files", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "fs", "Telescope lsp_document_symbols", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "fe", "Telescope lsp_references", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "fd", "Telescope lsp_definitions", { noremap = true, silent = true }) -- LSP vim.keymap.set( 'n', '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', 'q', vim.diagnostic.setloclist, { desc = "Set loclist", } ) vim.keymap.set( 'n', 'lh', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) end, { desc = "Toggle inlay hints", } ) vim.keymap.set( { 'n', 'x' }, 'la', 'lua require("fastaction").code_action()', { 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' }, '', vim.lsp.buf.signature_help, opts) -- vim.keymap.set('n', 'wa', vim.lsp.buf.add_workleader_folder, opts) -- vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workleader_folder, opts) -- vim.keymap.set('n', 'wl', function() -- print(vim.inspect(vim.lsp.buf.list_workleader_folders())) -- end, opts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) -- vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) -- vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) vim.keymap.set('n', 'lf', function() vim.lsp.buf.format { async = true } end, opts) end, }) -- LSP Diagnostics vim.keymap.set( "n", "dn", vim.diagnostic.goto_next, { desc = "Go to next diagnostic", noremap = true, silent = true, } ) vim.keymap.set( "n", "dp", vim.diagnostic.goto_prev, { desc = "Go to previous diagnostic", noremap = true, silent = true, } ) vim.keymap.set( "n", "dd", vim.diagnostic.open_float, { desc = "Open diagnostics", noremap = true, silent = true, } ) -- Lspsaga vim.api.nvim_set_keymap("n", "li", "Lspsaga incoming_calls", { noremap = true, silent = true }) vim.keymap.set( "n", "aa", "execute 'Lspsaga outline' | set relativenumber", { noremap = true, silent = true } ) vim.api.nvim_set_keymap("n", "lo", "Lspsaga outgoing_calls", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "gp", "Lspsaga peek_type_definition", { noremap = true }) -- inc-rename vim.keymap.set( "n", "lr", ":IncRename ", { desc = "Symbol rename", noremap = true, silent = true, } ) -- Trouble vim.api.nvim_set_keymap( "n", "tb", "Trouble diagnostics toggle filter.buf=0", { desc = "Trouble: Toggle diagnostics for the current buffer", noremap = true, silent = true, } ) -- todo vim.api.nvim_set_keymap("n", "tf", "TodoTelescope", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "tl", "TodoTrouble toggle", { noremap = true, silent = true }) -- auto session vim.api.nvim_set_keymap("n", "ss", "SessionSave", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "sr", "SessionRestore", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "sd", "SessionDelete", { noremap = true, silent = true }) -- terminal vim.api.nvim_set_keymap("n", "tn", "ToggleTerm direction=horizontal size=15", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "tv", "ToggleTerm direction=vertical size=70", { noremap = true, silent = true }) function _G.set_terminal_keymaps() local opts = { buffer = 0 } vim.keymap.set('t', '', [[]], opts) -- Exit to normal mode vim.keymap.set('t', 'jk', [[]], opts) vim.keymap.set('t', '', [[wincmd h]], opts) vim.keymap.set('t', '', [[wincmd j]], opts) vim.keymap.set('t', '', [[wincmd k]], opts) vim.keymap.set('t', '', [[wincmd l]], opts) vim.keymap.set('t', '', [[]], opts) end vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') -- oil vim.keymap.set("n", "-", "Oil", { desc = "Open parent directory" }) vim.keymap.set("n", "-", "FuzzyOil", { desc = "Fuzzy find directory" }) -- maximize.nvim vim.keymap.set('n', 'z', "lua require('maximize').toggle()") -- 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 .. "", { noremap = true, silent = true }) end