diff --git a/lua/dot/init.lua b/lua/dot/init.lua index 4eac994..5c8ebe8 100644 --- a/lua/dot/init.lua +++ b/lua/dot/init.lua @@ -84,3 +84,5 @@ vim.diagnostic.config({ }, }) +require("dot.keymaps") + diff --git a/lua/dot/keymaps.lua b/lua/dot/keymaps.lua new file mode 100644 index 0000000..d010ac8 --- /dev/null +++ b/lua/dot/keymaps.lua @@ -0,0 +1,53 @@ +vim.keymap.set("n", "", "nohlsearch") + +-- Language Server Protocol & Actions +vim.keymap.set("n", "q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" }) +vim.keymap.set("n", "t", vim.diagnostic.open_float, { desc = "Open diagnostic" }) + +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(e) + ---@param lhs string + ---@param rhs string|function + ---@param desc string + ---@param mode string|string[]? + local function map(lhs, rhs, desc, mode) + vim.keymap.set(mode or "n", lhs, rhs, { buffer = e.buf, desc = "LSP: " .. desc }) + end + + map("grn", vim.lsp.buf.rename, "[R]e[n]ame") + map("gra", vim.lsp.buf.code_action, "[G]oto Code [A]ction", { "n", "x" }) + map("grr", ":lua require('telescope.builtin').lsp_references", "[G]oto [R]eferences") + map("gri", ":lua require('telescope.builtin').lsp_implementations", "[G]oto [I]mplementation") + map("grd", ":lua require('telescope.builtin').lsp_definitions", "[G]oto [D]efinition") + map("grt", ":lua require('telescope.builtin').lsp_type_definitions", "[G]oto [T]ype Definition") + map("grD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + map("gO", ":lua require('telescope.builtin').lsp_document_symbols", "[O]pen Document Symbols") + map("gW", ":lua require('telescope.builtin').lsp_dynamic_workspace_symbols", "Open [W]orkspace Symbols") + end, + group = vim.api.nvim_create_augroup("dot-lsp-attach-keymaps", { clear = true }), +}) + +-- Navigation +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" }) + +vim.keymap.set("n", "w", ":lua require('harpoon'):list():add()", { desc = "Harpoon: Add file to list" }) +vim.keymap.set("n", "e", ":lua require('harpoon').ui:toggle_quick_menu(require('harpoon'):list())", { + desc = "Harpoon: Add file to list", +}) + +vim.keymap.set( + "n", + "", + vim.fn.executable("yazi") and require("dot.tfm").open or ":Ex", + { desc = "Open file manager" } +) + +-- Fuzzy find +vim.keymap.set("n", "ff", ":lua require('telescope.builtin').find_files()", { desc = "Telescope: [F]ind [F]iles" }) +vim.keymap.set("n", "fw", ":lua require('telescope.builtin').live_grep()", { desc = "Telescope: [F]ind [W]ord" }) +vim.keymap.set("n", "/", ":lua require('telescope.builtin').current_buffer_fuzzy_find()", { + desc = "Telescope: Find in current buffer", +}) diff --git a/lua/dot/plugins.lua b/lua/dot/plugins.lua index 6c138c4..4a469f2 100644 --- a/lua/dot/plugins.lua +++ b/lua/dot/plugins.lua @@ -3,6 +3,8 @@ local lze = require("lze") lze.register_handlers(require("lzextras").lsp) lze.load({ + { "plenary.nvim", dep_of = { "harpoon", "telescope.nvim" } }, + -- Language Server Protocol { "nvim-lspconfig", @@ -18,4 +20,25 @@ lze.load({ }, { "lazydev.nvim", on_require = "lazydev" }, { import = "dot.lsp" }, + -- Fuzzy Finding + { + "telescope.nvim", + after = function() + require("telescope").load_extension("zf-native") + end, + cmd = { "Telescope" }, + on_require = "telescope", + }, + { "telescope-zf-native.nvim", dep_of = "telescope.nvim" }, + + -- File quick switching + { + "harpoon2", + after = function() + require("harpoon"):setup() + end, + on_require = "harpoon", + }, + + -- Auto-saving })