diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua index 2b62c6f1..801538b1 100644 --- a/.config/nvim/lua/config/keymaps.lua +++ b/.config/nvim/lua/config/keymaps.lua @@ -1,6 +1,8 @@ -- Keymaps are automatically loaded on the VeryLazy event -- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua -- Add any additional keymaps here +local map = vim.keymap.set + -- ╭───────────────────────────────────────────────────────────╮ -- │ Credit: June Gunn ?/! | Google it / Feeling lucky │ -- ╰───────────────────────────────────────────────────────────╯ @@ -16,112 +18,132 @@ local function google(pat, lucky) ) end -vim.keymap.set("n", "?", function() +map("n", "?", function() google(vim.fn.expand(""), false) end, { desc = "Google" }) -vim.keymap.set("x", "?", function() +map("x", "?", function() google(vim.fn.getreg("g"), false) end, { desc = "Google" }) if vim.lsp.inlay_hint then - vim.keymap.set("n", "uh", function() + map("n", "uh", function() vim.lsp.inlay_hint(0, nil) end, { desc = "Toggle Inlay Hints" }) end -vim.keymap.set("n", "ft", "") -vim.keymap.set("n", "fT", "") +map("n", "ft", "") +map("n", "fT", "") -vim.keymap.set("n", "", "zz") +map("n", "", "zz") -vim.keymap.set("n", "", "zz") +map("n", "", "zz") -vim.keymap.set("n", "n", "nzzzv") +map("n", "n", "nzzzv") -vim.keymap.set("n", "N", "Nzzzv") +map("n", "N", "Nzzzv") + +map("n", "", "_", { desc = "First character of Line" }) +map("n", "", "$", { desc = "Last character of Line" }) + +map("n", "dd", function() + local is_empty_line = vim.api.nvim_get_current_line():match("^%s*$") + if is_empty_line then + return '"_dd' + else + return "dd" + end +end, { noremap = true, expr = true, desc = "Don't yank empty line to clipboard" }) + +map("n", "gV", '"`[" . strpart(getregtype(), 0, 1) . "`]"', { expr = true, desc = "Visually select changed text" }) + +-- Search inside visually highlighted text. Use `silent = false` for it to +-- make effect immediately. +map("x", "g/", "/\\%V", { silent = false, desc = "Search inside visual selection" }) + +-- Search visually selected text (slightly better than builtins in Neovim>=0.8) +map("x", "*", [[y/\V=escape(@", '/\')]]) +map("x", "#", [[y?\V=escape(@", '?\')]]) -vim.keymap.set("n", "H", "_", { desc = "First character of Line" }) -vim.keymap.set("n", "L", "$", { desc = "Last character of Line" }) -- DEFAULT_KEYMAPS: -- Half-window movements: -vim.keymap.set({ "n", "x" }, "", "lua Scroll('', 1, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('', 1, 1)") +map({ "n", "x" }, "", "lua Scroll('', 1, 1)") +map({ "n", "x" }, "", "lua Scroll('', 1, 1)") -- Page movements: -vim.keymap.set({ "n", "x" }, "", "lua Scroll('', 1, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('', 1, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('', 1, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('', 1, 1)") +map({ "n", "x" }, "", "lua Scroll('', 1, 1)") +map({ "n", "x" }, "", "lua Scroll('', 1, 1)") +map({ "n", "x" }, "", "lua Scroll('', 1, 1)") +map({ "n", "x" }, "", "lua Scroll('', 1, 1)") -- EXTRA_KEYMAPS: -- Start/end of file and line number movements: -vim.keymap.set({ "n", "x" }, "gg", "lua Scroll('gg')") -vim.keymap.set({ "n", "x" }, "G", "lua Scroll('G', 0, 1)") +map({ "n", "x" }, "gg", "lua Scroll('gg')") +map({ "n", "x" }, "G", "lua Scroll('G', 0, 1)") -- Start/end of line: -vim.keymap.set({ "n", "x" }, "0", "lua Scroll('0')") -vim.keymap.set({ "n", "x" }, "^", "lua Scroll('^')") -vim.keymap.set({ "n", "x" }, "$", "lua Scroll('$', 0, 1)") +map({ "n", "x" }, "0", "lua Scroll('0')") +map({ "n", "x" }, "^", "lua Scroll('^')") +map({ "n", "x" }, "$", "lua Scroll('$', 0, 1)") -- Paragraph movements: -vim.keymap.set({ "n", "x" }, "{", "lua Scroll('{')") -vim.keymap.set({ "n", "x" }, "}", "lua Scroll('}')") +map({ "n", "x" }, "{", "lua Scroll('{')") +map({ "n", "x" }, "}", "lua Scroll('}')") -- Previous/next search result: -vim.keymap.set("n", "n", "lua Scroll('n', 1)") -vim.keymap.set("n", "N", "lua Scroll('N', 1)") -vim.keymap.set("n", "*", "lua Scroll('*', 1)") -vim.keymap.set("n", "#", "lua Scroll('#', 1)") -vim.keymap.set("n", "g*", "lua Scroll('g*', 1)") -vim.keymap.set("n", "g#", "lua Scroll('g#', 1)") +map("n", "n", "lua Scroll('n', 1)") +map("n", "N", "lua Scroll('N', 1)") +map("n", "*", "lua Scroll('*', 1)") +map("n", "#", "lua Scroll('#', 1)") +map("n", "g*", "lua Scroll('g*', 1)") +map("n", "g#", "lua Scroll('g#', 1)") -- Previous/next cursor location: -vim.keymap.set("n", "", "lua Scroll('', 1)") -vim.keymap.set("n", "", "lua Scroll('1', 1)") +map("n", "", "lua Scroll('', 1)") +map("n", "", "lua Scroll('1', 1)") -- Screen scrolling: -vim.keymap.set("n", "zz", "lua Scroll('zz', 0, 1)") -vim.keymap.set("n", "zt", "lua Scroll('zt', 0, 1)") -vim.keymap.set("n", "zb", "lua Scroll('zb', 0, 1)") -vim.keymap.set("n", "z.", "lua Scroll('z.', 0, 1)") -vim.keymap.set("n", "z", "lua Scroll('zt^', 0, 1)") -vim.keymap.set("n", "z-", "lua Scroll('z-', 0, 1)") -vim.keymap.set("n", "z^", "lua Scroll('z^', 0, 1)") -vim.keymap.set("n", "z+", "lua Scroll('z+', 0, 1)") -vim.keymap.set("n", "", "lua Scroll('', 0, 1)") -vim.keymap.set("n", "", "lua Scroll('', 0, 1)") +map("n", "zz", "lua Scroll('zz', 0, 1)") +map("n", "zt", "lua Scroll('zt', 0, 1)") +map("n", "zb", "lua Scroll('zb', 0, 1)") +map("n", "z.", "lua Scroll('z.', 0, 1)") +map("n", "z", "lua Scroll('zt^', 0, 1)") +map("n", "z-", "lua Scroll('z-', 0, 1)") +map("n", "z^", "lua Scroll('z^', 0, 1)") +map("n", "z+", "lua Scroll('z+', 0, 1)") +map("n", "", "lua Scroll('', 0, 1)") +map("n", "", "lua Scroll('', 0, 1)") -- Horizontal screen scrolling: -vim.keymap.set("n", "zH", "lua Scroll('zH')") -vim.keymap.set("n", "zL", "lua Scroll('zL')") -vim.keymap.set("n", "zs", "lua Scroll('zs')") -vim.keymap.set("n", "ze", "lua Scroll('ze')") -vim.keymap.set("n", "zh", "lua Scroll('zh', 0, 1)") -vim.keymap.set("n", "zl", "lua Scroll('zl', 0, 1)") +map("n", "zH", "lua Scroll('zH')") +map("n", "zL", "lua Scroll('zL')") +map("n", "zs", "lua Scroll('zs')") +map("n", "ze", "lua Scroll('ze')") +map("n", "zh", "lua Scroll('zh', 0, 1)") +map("n", "zl", "lua Scroll('zl', 0, 1)") -- EXTENDED_KEYMAPS: -- Up/down movements: -vim.keymap.set({ "n", "x" }, "k", "lua Scroll('k', 0, 1)") -vim.keymap.set({ "n", "x" }, "j", "lua Scroll('j', 0, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('k', 0, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('j', 0, 1)") +map({ "n", "x" }, "k", "lua Scroll('k', 0, 1)") +map({ "n", "x" }, "j", "lua Scroll('j', 0, 1)") +map({ "n", "x" }, "", "lua Scroll('k', 0, 1)") +map({ "n", "x" }, "", "lua Scroll('j', 0, 1)") -- Left/right movements: -vim.keymap.set({ "n", "x" }, "h", "lua Scroll('h', 0, 1)") -vim.keymap.set({ "n", "x" }, "l", "lua Scroll('l', 0, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('h', 0, 1)") -vim.keymap.set({ "n", "x" }, "", "lua Scroll('l', 0, 1)") +map({ "n", "x" }, "h", "lua Scroll('h', 0, 1)") +map({ "n", "x" }, "l", "lua Scroll('l', 0, 1)") +map({ "n", "x" }, "", "lua Scroll('h', 0, 1)") +map({ "n", "x" }, "", "lua Scroll('l', 0, 1)") -- LSP_KEYMAPS: -- LSP go-to-definition: -vim.keymap.set("n", "gd", "lua Scroll('definition')") +map("n", "gd", "lua Scroll('definition')") -- LSP go-to-declaration: -vim.keymap.set("n", "gD", "lua Scroll('declaration')") +map("n", "gD", "lua Scroll('declaration')") -vim.keymap.set("n", "", "noh", { noremap = true, silent = true, desc = "Clear Search" }) +map("n", "", "noh", { noremap = true, silent = true, desc = "Clear Search" })