-- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` -- Close floating windows with Escape from anywhere vim.keymap.set('n', '', function() -- Try to close any floating windows for _, win in ipairs(vim.api.nvim_list_wins()) do local config = vim.api.nvim_win_get_config(win) if config.relative ~= '' then vim.api.nvim_win_close(win, false) return -- Found and closed a floating window end end -- No floating window found, do normal escape behavior vim.cmd('nohlsearch') end, { silent = true, desc = 'Close floating window or clear highlight' }) -- Diagnostic keymaps vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier -- for people to discover. Otherwise, you normally need to press , which -- is not what someone will guess without a bit more experience. -- -- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping -- or just use to exit terminal mode vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) -- TIP: Disable arrow keys in normal mode -- vim.keymap.set('n', '', 'echo "Use h to move!!"') -- vim.keymap.set('n', '', 'echo "Use l to move!!"') -- vim.keymap.set('n', '', 'echo "Use k to move!!"') -- vim.keymap.set('n', '', 'echo "Use j to move!!"') -- Keybinds to make split navigation easier. -- Use CTRL+ to switch between windows -- See `:help wincmd` for a list of all window commands vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) -- Quit keymaps - easier ways to close Neovim (using capital Q to avoid conflict with diagnostic quickfix) -- Session management is automatic via auto-session plugin (saves on exit, restores on startup) vim.keymap.set('n', 'Q', 'qa', { desc = '[Q]uit [A]ll' }) -- Alternative quit options (commented out, uncomment if needed): -- vim.keymap.set('n', 'Qq', 'qa!', { desc = '[Q]uit all without saving (force)' }) -- vim.keymap.set('n', 'Qw', function() -- vim.cmd 'wa' -- Write all buffers -- vim.cmd 'qa' -- end, { desc = '[Q]uit all and [W]rite files' }) -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes -- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) -- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) -- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) -- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) -- ======================================================================== -- BUFFER OPERATIONS (b) -- ======================================================================== vim.keymap.set('n', 'bd', 'bd', { desc = 'Delete buffer' }) vim.keymap.set('n', 'bD', 'bd!', { desc = 'Delete buffer (force)' }) vim.keymap.set('n', 'bn', 'bnext', { desc = 'Next buffer' }) vim.keymap.set('n', 'bp', 'bprevious', { desc = 'Previous buffer' }) vim.keymap.set('n', 'bo', '%bd|e#|bd#', { desc = 'Delete other buffers' }) -- ======================================================================== -- WINDOW OPERATIONS (w) -- ======================================================================== vim.keymap.set('n', 'ww', 'w', { desc = 'Other window' }) vim.keymap.set('n', 'wd', 'c', { desc = 'Delete window' }) vim.keymap.set('n', 'ws', 's', { desc = 'Split window below' }) vim.keymap.set('n', 'wv', 'v', { desc = 'Split window right' }) vim.keymap.set('n', 'wm', '_|', { desc = 'Maximize window' }) vim.keymap.set('n', 'w=', '=', { desc = 'Balance windows' }) vim.keymap.set('n', 'wh', 'h', { desc = 'Go to left window' }) vim.keymap.set('n', 'wj', 'j', { desc = 'Go to lower window' }) vim.keymap.set('n', 'wk', 'k', { desc = 'Go to upper window' }) vim.keymap.set('n', 'wl', 'l', { desc = 'Go to right window' }) -- ======================================================================== -- UI OPERATIONS (u) -- ======================================================================== vim.keymap.set('n', 'ul', 'Lazy', { desc = 'Open Lazy' }) vim.keymap.set('n', 'um', 'Mason', { desc = 'Open Mason' }) vim.keymap.set('n', 'ui', vim.show_pos, { desc = 'Inspect position' }) vim.keymap.set('n', 'uI', 'InspectTree', { desc = 'Inspect tree' }) vim.keymap.set('n', 'un', function() require('noice').cmd 'dismiss' end, { desc = 'Dismiss notifications' })