-- Keymap File local map = vim.keymap.set -- jk exit from insert mode map("i", "jk", "noh", { silent = true }) map({"n", "x"}, "", "noh", { silent = true }) ---- -- Movements ---- -- More powerful J and K (use 6j/6k) -- Via Pseudometa (https://nanotipsforvim.prose.sh/motion-setup--hjkl-as-amplified-hjkl) map({ "n", "x" }, "", "6j") map({ "n", "x" }, "", "6k") -- And fix the keys to other ones map({ "n", "x" }, "M", "J", { desc = "Merge" }) -- Replace the join command map("n", "gh", vim.lsp.buf.hover, { desc = "Hover" }) -- Code action hover -- Move to window using the hjkl keys map("n", "", "h", { desc = "Go to left window", remap = true }) map("n", "", "j", { desc = "Go to lower window", remap = true }) map("n", "", "k", { desc = "Go to upper window", remap = true }) map("n", "", "l", { desc = "Go to right window", remap = true }) -- Move between buffers map("n", "", "BufferLineCyclePrev", { desc = "Move buffer left", silent = true }) map("n", "", "BufferLineCycleNext", { desc = "Move buffer right", silent = true }) map("n", "<", "BufferLineMovePrev", { desc = "Move buffer left", silent = true }) map("n", ">", "BufferLineMoveNext", { desc = "Move buffer right", silent = true }) -- ToggleTerm Bindings map("n", "a", "ToggleTerm name=main", { desc = "Floating Terminal", silent = true }) -- Undotree map('n', 'fu', vim.cmd.UndotreeToggle) ---- -- Cool Macros ---- -- Quit All map("n", "qq", "qa", { desc = "Quit all" }) -- Copy and paste from system clipboard map({ "n", "x" }, "y", '"+y', { desc = "Yank to system clipboard", silent = true }) map({ "n", "x" }, "p", '"+p', { desc = "Paste after from system clipboard", silent = true }) map({ "n", "x" }, "P", '"+P', { desc = "Paste before from system clipboard", silent = true }) -- Neotree map("n", "e", function() require("neo-tree.command").execute({ action = "show", position = "right", toggle = true, dir = vim.loop.cwd() }) end, { desc = "Open Neotree", remap = true }) -- Conform Formatting map({ "n", "v" }, "mp", function() require("conform").format({ lsp_fallback = true, async = false, timeout_ms = 500, }) end, { desc = "Format file or range (in visual mode)" }) -- diagnostic ---@param next "f"|"b" ---@param severity "ERROR"|"WARN"? local diagnostic_goto = function(next, severity) local go = (next == "f") and vim.diagnostic.goto_next or vim.diagnostic.goto_prev local severity_index = severity and vim.diagnostic.severity[severity] or nil return function() go({ severity = severity_index }) end end map("n", "cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" }) map("n", "]d", diagnostic_goto("f"), { desc = "Next Diagnostic" }) map("n", "[d", diagnostic_goto("b"), { desc = "Prev Diagnostic" }) map("n", "]e", diagnostic_goto("f", "ERROR"), { desc = "Next Error" }) map("n", "[e", diagnostic_goto("b", "ERROR"), { desc = "Prev Error" }) map("n", "]w", diagnostic_goto("f", "WARN"), { desc = "Next Warning" }) map("n", "[w", diagnostic_goto("b", "WARN"), { desc = "Prev Warning" }) ---- -- Plugins ---- -- Telescope (fuzzy finder) local function telescope_git_fallback() vim.fn.system("git rev-parse --is-inside-work-tree") local is_git_repo = vim.v.shell_error == 0 if is_git_repo then require("telescope.builtin").git_files() else require("telescope.builtin").find_files() end end local function telescope_files() require("telescope.builtin").find_files({ cwd = vim.uv.cwd() }) end local function telescope_oldfiles() require("telescope.builtin").oldfiles({ cwd = vim.uv.cwd() }) end local function telescope_live_grep() vim.fn.system("git rev-parse --is-inside-work-tree") local is_git_repo = vim.v.shell_error == 0 local git_root = vim.fn.fnamemodify(vim.fn.finddir(".git", ".;"), ":h") require("telescope.builtin").live_grep({ cwd = is_git_repo and git_root or vim.uv.cwd(), }) end map("n", "", telescope_git_fallback, { desc = "Find files (git/fallback, cwd)" }) map("n", "ff", telescope_files, { desc = "Find files (cwd)" }) map("n", "fo", telescope_oldfiles, { desc = "Find files (cwd)" }) map("n", "/", telescope_live_grep, { desc = "Live grep (cwd)" }) map("n", ",", require("telescope.builtin").buffers, { desc = "Find buffers" }) map("n", "\"", require("telescope.builtin").registers, { desc = "Find registers" }) ---- -- Fixes ---- -- Proper Wrap Navigation map({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) map({ "n", "x" }, "", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) map({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) map({ "n", "x" }, "", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) -- Auto Re-highlight After Indent map("v", "<", "", ">gv") -- Saner Movement of nN map("n", "n", "'Nn'[v:searchforward].'zv'.'zz'", { expr = true, desc = "Next search result" }) map("x", "n", "'Nn'[v:searchforward].'zz'", { expr = true, desc = "Next search result" }) map("o", "n", "'Nn'[v:searchforward].'zz'", { expr = true, desc = "Next search result" }) map("n", "N", "'nN'[v:searchforward].'zv'.'zz'", { expr = true, desc = "Prev search result" }) map("x", "N", "'nN'[v:searchforward].'zz'", { expr = true, desc = "Prev search result" }) map("o", "N", "'nN'[v:searchforward].'zz'", { expr = true, desc = "Prev search result" }) -- Terminal Mappings map("t", "", "", { desc = "Enter Normal Mode" }) map("t", "", "wincmd h", { desc = "Go to left window" }) map("t", "", "wincmd j", { desc = "Go to lower window" }) map("t", "", "wincmd k", { desc = "Go to upper window" }) map("t", "", "wincmd l", { desc = "Go to right window" }) map("t", "", "close", { desc = "Hide Terminal" }) map("t", "", "close", { desc = "which_key_ignore" })