From fd2e16fc92dd7a33908ceff1e31f03e05a78fda9 Mon Sep 17 00:00:00 2001 From: Samir Benmendil Date: Sun, 23 Feb 2025 13:25:34 +0000 Subject: [PATCH] lazyvim: absorb keymaps --- nvim/lua/config/keymaps.lua | 139 +++++++++++++++++++++--------------- nvim/lua/plugins/snacks.lua | 4 +- 2 files changed, 85 insertions(+), 58 deletions(-) diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua index a0285ce..fbe320c 100644 --- a/nvim/lua/config/keymaps.lua +++ b/nvim/lua/config/keymaps.lua @@ -1,60 +1,75 @@ -- Keymaps are automatically loaded on the VeryLazy event --- NOTE: Default LazyVim keys are not loaded automatically, review upstream keymas occasionnaly. --- ~/.local/share/nvim/lazy/LazyVim/lua/lazyvim/config/keymaps.lua -local Util = require("lazyvim.util") +local map = vim.keymap.set + +-- better up/down +map({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", { desc = "Down", expr = true, silent = true }) +map({ "n", "x" }, "", "v:count == 0 ? 'gj' : 'j'", { desc = "Down", expr = true, silent = true }) +map({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", { desc = "Up", expr = true, silent = true }) +map({ "n", "x" }, "", "v:count == 0 ? 'gk' : 'k'", { desc = "Up", expr = true, silent = true }) + +-- Move to window using the hjkl keys +map("n", "", "W", { desc = "Go to Prev Window", remap = true }) +map("n", "", "w", { desc = "Go to Next Window", remap = true }) +map("n", "", "j", { desc = "Go to Lower Window", remap = true }) +map("n", "", "k", { desc = "Go to Upper Window", remap = true }) -- Resize window using arrow keys -- TODO: this is cool, but should also support a number -vim.keymap.set("n", "", "resize +2", { desc = "Increase window height" }) -vim.keymap.set("n", "", "resize -2", { desc = "Decrease window height" }) -vim.keymap.set("n", "", "vertical resize -2", { desc = "Decrease window width" }) -vim.keymap.set("n", "", "vertical resize +2", { desc = "Increase window width" }) +map("n", "", "resize +2", { desc = "Increase Window Height" }) +map("n", "", "resize -2", { desc = "Decrease Window Height" }) +map("n", "", "vertical resize -2", { desc = "Decrease Window Width" }) +map("n", "", "vertical resize +2", { desc = "Increase Window Width" }) -- Move Lines -vim.keymap.set("n", "", "m .+1==", { desc = "Move down" }) -vim.keymap.set("n", "", "m .-2==", { desc = "Move up" }) --- NOTE: this triggers with when I'm too quick at doing "go to normal mode then move line" -vim.keymap.set("i", "", "m .+1==gi", { desc = "Move down" }) -vim.keymap.set("i", "", "m .-2==gi", { desc = "Move up" }) -vim.keymap.set("v", "", ":m '>+1gv=gv", { desc = "Move down" }) -vim.keymap.set("v", "", ":m '<-2gv=gv", { desc = "Move up" }) +-- NOTE: these trigger with when I'm too quick at doing "go to normal mode then move line" +map("n", "", "execute 'move .+' . v:count1==", { desc = "Move Down" }) +map("n", "", "execute 'move .-' . (v:count1 + 1)==", { desc = "Move Up" }) +map("i", "", "m .+1==gi", { desc = "Move Down" }) +map("i", "", "m .-2==gi", { desc = "Move Up" }) +map("v", "", ":execute \"'<,'>move '>+\" . v:count1gv=gv", { desc = "Move Down" }) +map("v", "", ":execute \"'<,'>move '<-\" . (v:count1 + 1)gv=gv", { desc = "Move Up" }) -- buffers -vim.keymap.set("n", "", "BufferLineCyclePrev", { desc = "Prev buffer" }) -vim.keymap.set("n", "", "BufferLineCycleNext", { desc = "Next buffer" }) -vim.keymap.set("n", "[b", "BufferLineCyclePrev", { desc = "Prev buffer" }) -vim.keymap.set("n", "]b", "BufferLineCycleNext", { desc = "Next buffer" }) +map("n", "", "BufferLineCyclePrev", { desc = "Prev Buffer" }) +map("n", "", "BufferLineCycleNext", { desc = "Next Buffer" }) +map("n", "[b", "BufferLineCyclePrev", { desc = "Prev Buffer" }) +map("n", "]b", "BufferLineCycleNext", { desc = "Next Buffer" }) -vim.keymap.set("n", "bb", "e #", { desc = "Switch to Other Buffer" }) +map("n", "bb", "e #", { desc = "Switch to Other Buffer" }) --- Clear search with -vim.keymap.set({ "i", "n" }, "", "noh", { desc = "Escape and clear hlsearch" }) +-- Clear search and stop snippet on escape +map({ "i", "n", "s" }, "", function() + vim.cmd("noh") + -- TODO: stop snippet with esc *but don't do it in insert mode* + -- require("luasnip").unlink_current() + return "" +end, { expr = true, desc = "Escape and Clear hlsearch" }) -- Clear search, diff update and redraw -- taken from runtime/lua/_editor.lua -vim.keymap.set( +map( "n", "ur", "nohlsearchdiffupdatenormal! ", - { desc = "Redraw / clear hlsearch / diff update" } + { desc = "Redraw / Clear hlsearch / Diff Update" } ) -vim.keymap.set({ "n", "x" }, "gw", "*N", { desc = "Search word under cursor" }) +map({ "n", "x" }, "gw", "*N", { desc = "Search word under cursor" }) -- Add undo break-points -vim.keymap.set("i", ",", ",u") -vim.keymap.set("i", ".", ".u") -vim.keymap.set("i", ";", ";u") +map("i", ",", ",u") +map("i", ".", ".u") +map("i", ";", ";u") + +--keywordprg +map("n", "K", "norm! K", { desc = "Keywordprg" }) -- lazy -vim.keymap.set("n", "l", ":Lazy", { desc = "Lazy" }) +map("n", "l", "Lazy", { desc = "Lazy" }) -- new file -vim.keymap.set("n", "fn", "enew", { desc = "New File" }) - -vim.keymap.set("n", "[q", vim.cmd.cprev, { desc = "Previous quickfix" }) -vim.keymap.set("n", "]q", vim.cmd.cnext, { desc = "Next quickfix" }) +map("n", "fn", "enew", { desc = "New File" }) -- diagnostic local diagnostic_goto = function(next, severity) @@ -64,37 +79,49 @@ local diagnostic_goto = function(next, severity) go({ severity = severity }) end end -vim.keymap.set("n", "cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" }) -vim.keymap.set("n", "]d", diagnostic_goto(true), { desc = "Next Diagnostic" }) -vim.keymap.set("n", "[d", diagnostic_goto(false), { desc = "Prev Diagnostic" }) -vim.keymap.set("n", "]e", diagnostic_goto(true, "ERROR"), { desc = "Next Error" }) -vim.keymap.set("n", "[e", diagnostic_goto(false, "ERROR"), { desc = "Prev Error" }) -vim.keymap.set("n", "]w", diagnostic_goto(true, "WARN"), { desc = "Next Warning" }) -vim.keymap.set("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" }) +map("n", "cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" }) --- stylua: ignore start +map("n", "]d", diagnostic_goto(true), { desc = "Next Diagnostic" }) +map("n", "[d", diagnostic_goto(false), { desc = "Prev Diagnostic" }) +map("n", "]e", diagnostic_goto(true, "ERROR"), { desc = "Next Error" }) +map("n", "[e", diagnostic_goto(false, "ERROR"), { desc = "Prev Error" }) +map("n", "]w", diagnostic_goto(true, "WARN"), { desc = "Next Warning" }) +map("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" }) -- toggle options -vim.keymap.set("n", "ud", Snacks.toggle.diagnostics, { desc = "Toggle Diagnostics" }) -local conceallevel = vim.o.conceallevel > 0 and vim.o.conceallevel or 3 -vim.keymap.set("n", "uc", function() Snacks.toggle("conceallevel", false, {0, conceallevel}) end, { desc = "Toggle Conceal" }) +Snacks.toggle.option("spell", { name = "Spelling" }):map("us") +Snacks.toggle.option("wrap", { name = "Wrap" }):map("uw") +Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("uL") +Snacks.toggle.diagnostics():map("ud") +Snacks.toggle.line_number():map("ul") +Snacks.toggle.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2, name = "Conceal Level" }):map("uc") +Snacks.toggle.option("showtabline", { off = 0, on = vim.o.showtabline > 0 and vim.o.showtabline or 2, name = "Tabline" }):map("uA") +Snacks.toggle.treesitter():map("uT") +Snacks.toggle.option("background", { off = "light", on = "dark" , name = "Dark Background" }):map("ub") +Snacks.toggle.dim():map("uD") +Snacks.toggle.animate():map("ua") +Snacks.toggle.indent():map("ug") +Snacks.toggle.scroll():map("uS") +Snacks.toggle.profiler():map("dpp") +Snacks.toggle.profiler_highlights():map("dph") + +if vim.lsp.inlay_hint then + Snacks.toggle.inlay_hints():map("uh") +end + +map({ "n", "x" }, "gB", function() Snacks.gitbrowse() end, { desc = "Git Browse (open)" }) +map({"n", "x" }, "gY", function() + Snacks.gitbrowse({ open = function(url) vim.fn.setreg("+", url) end, notify = false }) +end, { desc = "Git Browse (copy)" }) -- highlights under cursor -if vim.fn.has("nvim-0.9.0") == 1 then - vim.keymap.set("n", "ui", vim.show_pos, { desc = "Inspect Pos" }) -end +map("n", "ui", vim.show_pos, { desc = "Inspect Pos" }) +map("n", "uI", "InspectTree", { desc = "Inspect Tree" }) -- floating terminal -- TODO: I prefer a split buffer for terminal, need to review how to make this more vim-like -local lazyterm = function() LazyVim.terminal(nil, {}) end -vim.keymap.set("n", "ft", lazyterm, { desc = "Terminal (Root Dir)" }) -vim.keymap.set("n", "fT", function() LazyVim.terminal() end, { desc = "Terminal (cwd)" }) +map("n", "", function() Snacks.terminal() end, { desc = "Terminal (cmd)" }) -- Terminal Mappings -vim.keymap.set("t", "", "", { desc = "Enter Normal Mode" }) -vim.keymap.set("t", "", "wincmd h", { desc = "Go to Left Window" }) -vim.keymap.set("t", "", "wincmd j", { desc = "Go to Lower Window" }) -vim.keymap.set("t", "", "wincmd k", { desc = "Go to Upper Window" }) -vim.keymap.set("t", "", "wincmd l", { desc = "Go to Right Window" }) -vim.keymap.set("t", "", "close", { desc = "Hide Terminal" }) -vim.keymap.set("t", "", "close", { desc = "which_key_ignore" }) +map("t", "", "", { desc = "Enter Normal Mode" }) +map("t", "", "close", { desc = "Hide Terminal" }) diff --git a/nvim/lua/plugins/snacks.lua b/nvim/lua/plugins/snacks.lua index 63e12ab..89eec46 100644 --- a/nvim/lua/plugins/snacks.lua +++ b/nvim/lua/plugins/snacks.lua @@ -28,10 +28,10 @@ return { terminal = { win = { keys = { - nav_h = { "", term_nav("h"), desc = "Go to Left Window", expr = true, mode = "t" }, + nav_h = { "", term_nav("W"), desc = "Go to Prev Window", expr = true, mode = "t" }, nav_j = { "", term_nav("j"), desc = "Go to Lower Window", expr = true, mode = "t" }, nav_k = { "", term_nav("k"), desc = "Go to Upper Window", expr = true, mode = "t" }, - nav_l = { "", term_nav("l"), desc = "Go to Right Window", expr = true, mode = "t" }, + nav_l = { "", term_nav("w"), desc = "Go to Next Window", expr = true, mode = "t" }, }, }, }, -- 2.48.1