-- ──────────────────────[ set leader key to space ]────────────────────── vim.g.mapleader = " " vim.g.maplocalleader = "\\" local keymap = vim.keymap -- ────────────────────────────[ general use ]──────────────────────────── keymap.set("i", "jk", "", { desc = "Exit insert mode with jk" }) keymap.set("n", "nh", ":nohl", { desc = "Clear search highlights" }) -- ────────────────────────────[ formatting ]───────────────────────── keymap.set({ "n", "v" }, "mp", function() require("conform").format({ lsp_fallback = true, async = false, timeout_ms = 1000, }) end, { desc = "Format file or range (in visual mode)" }) -- ──────────────────────────────[ linting ]────────────────────────────── keymap.set("n", "l", function() require("lint").try_lint() end, { desc = "Trigger linting for current file" }) -- ──────────────────────────[ inc/dec numbers ]────────────────────────── keymap.set("n", "+", "", { desc = "Increment number" }) keymap.set("n", "-", "", { desc = "Decrement number" }) -- ─────────────────────────[ split management ]────────────────────── keymap.set("n", "sv", "v", { desc = "Split window vertically" }) keymap.set("n", "sh", "s", { desc = "Split window horizontally" }) keymap.set("n", "se", "=", { desc = "Make splits equal size" }) keymap.set("n", "sx", "close", { desc = "Close current split" }) keymap.set("n", "sm", "MaximizerToggle", { desc = "Maximize/Minimize a split" }) -- ──────────────────────────[ tab management ]─────────────────────── keymap.set("n", "to", "tabnew", { desc = "Open new tab" }) keymap.set("n", "tx", "tabclose", { desc = "Close current tab" }) keymap.set("n", "tn", "tabn", { desc = "Go to next tab" }) keymap.set("n", "tp", "tabp", { desc = "Go to previous tab" }) keymap.set("n", "tf", "tabnew %", { desc = "Open current buffer in new tab" }) -- ────────────────────────────[ bufferline ]───────────────────────── keymap.set("n", "bp", "BufferLineTogglePin", { desc = "Toggle pinned tab" }) keymap.set("n", "bg", "BufferLinePick", { desc = "Pick tab" }) keymap.set("n", "bx", "BufferLinePickClose", { desc = "Pick tab to close" }) keymap.set("n", "bX", "BufferLineCloseOthers", { desc = "Close other tabs" }) keymap.set("n", "]b", "BufferLineCycleNext", { desc = "Next tab" }) keymap.set("n", "[b", "BufferLineCyclePrev", { desc = "Previous tab" }) -- keymap.set("n", "", "BufferLineMoveNext", { desc = "Move tab to the right" }) -- keymap.set("n", "", "BufferLineMovePrev", { desc = "Move tab to the left" }) -- ────────────────────────[ session management ]───────────────────── keymap.set("n", "wa", "SessionToggleAutoSave", { desc = "Toggle session autosave" }) keymap.set("n", "wD", "Autosession delete", { desc = "Delete a session" }) keymap.set("n", "wd", "SessionDelete", { desc = "Delete session for cwd" }) keymap.set("n", "wl", "SessionSearch", { desc = "Open session picker" }) keymap.set("n", "wr", "SessionRestore", { desc = "Restore session for cwd" }) keymap.set("n", "ws", "SessionSave", { desc = "Save session for cwd" }) -- ───────────────────────────────[ diff ]──────────────────────────── keymap.set("n", "hd", function() require("gitsigns").diffthis() end, { desc = "Diff this" }) keymap.set("n", "hD", function() require("gitsigns").diffthis("~") end, { desc = "Diff this ~" }) -- ───────────────────────────[ todo comments ]─────────────────────────── keymap.set("n", "]t", function() require("todo-comments").jump_next() end, { desc = "Next todo comment" }) keymap.set("n", "[t", function() require("todo-comments").jump_prev() end, { desc = "Previous todo comment" }) -- ──────────────────────────────[ trouble ]────────────────────────────── keymap.set("n", "xw", "Trouble diagnostics toggle", { desc = "Open trouble workspace diagnostics" }) keymap.set( "n", "xd", "Trouble diagnostics toggle filter.buf=0", { desc = "Open trouble document diagnostics" } ) keymap.set("n", "xq", "Trouble quickfix toggle", { desc = "Open trouble quickfix list" }) keymap.set("n", "xl", "Trouble loclist toggle", { desc = "Open trouble location list" }) keymap.set("n", "xt", "Trouble todo toggle", { desc = "Open todos in trouble" }) -- ─────────────────────────────[ telescope ]───────────────────────────── keymap.set("n", "ff", "Telescope find_files", { desc = "Fuzzy find files in cwd" }) keymap.set("n", "fr", "Telescope oldfiles", { desc = "Fuzzy find recent files" }) keymap.set("n", "fs", "Telescope live_grep", { desc = "Find string in cwd" }) keymap.set("n", "fc", "Telescope grep_string", { desc = "Find string under cursor in cwd" }) keymap.set("n", "ft", "TodoTelescope", { desc = "Find todos" }) -- ────────────────────────────[ substitute ]───────────────────────── keymap.set("n", "s", function() require("substitute").operator() end, { desc = "Substitute with motion" }) keymap.set("n", "ss", function() require("substitute").line() end, { desc = "Substitute line" }) keymap.set("n", "S", function() require("substitute").line() end, { desc = "Substitute to end of line" }) keymap.set("x", "s", function() require("substitute").visual() end, { desc = "Substitute in visual mode" }) -- ─────────────────────────────[ nvim-tree ]───────────────────────────── keymap.set("n", "ee", "NvimTreeToggle", { desc = "Toggle file explorer" }) keymap.set("n", "ef", "NvimTreeFindFileToggle", { desc = "Toggle file explorer on current file" }) keymap.set("n", "ec", "NvimTreeCollapse", { desc = "Collapse file explorer" }) keymap.set("n", "er", "NvimTreeRefresh", { desc = "Refresh file explorer" }) -- ────────────────────────────────[ git ]──────────────────────────────── keymap.set("n", "lg", "LazyGit", { desc = "Open LazyGit" }) keymap.set("n", "]h", function() require("gitsigns").nav_hunk("next") end, { desc = "Next hunk" }) keymap.set("n", "[h", function() require("gitsigns").nav_hunk("prev") end, { desc = "Prev hunk" }) keymap.set("n", "hs", function() require("gitsigns").stage_hunk() end, { desc = "Stage Hunk" }) keymap.set("n", "hr", function() require("gitsigns").reset_hunk() end, { desc = "Reset Hunk" }) keymap.set("v", "hs", function() require("gitsigns").stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "Stage Hunk" }) keymap.set("v", "hr", function() require("gitsigns").reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "Reset Hunk" }) keymap.set("n", "hS", function() require("gitsigns").stage_buffer() end, { desc = "Stage buffer" }) keymap.set("n", "hR", function() require("gitsigns").reset_buffer() end, { desc = "Reset buffer" }) keymap.set("n", "hu", function() require("gitsigns").undo_stage_hunk() end, { desc = "Undo stage hunk" }) keymap.set("n", "hp", function() require("gitsigns").preview_hunk() end, { desc = "Preview hunk" }) keymap.set("n", "hb", function() require("gitsigns").blame_line({ full = true }) end, { desc = "Blame line" }) keymap.set("n", "hB", function() require("gitsigns").toggle_current_line_blame() end, { desc = "Toggle line blame" }) keymap.set({ "o", "x" }, "ih", ":Gitsigns select_hunk", { desc = "Gitsigns select hunk" }) -- ────────────────────────────[ icon picker ]──────────────────────────── keymap.set("n", "i", "IconPickerNormal", { desc = "Open icon picker" }) keymap.set("n", "iy", "IconPickerYank", { desc = "Yank icon into register" }) --> Yank the selected icon into register -- keymap.set("i", "", "IconPickerInsert", { desc = "Open icon picker" })