diff --git a/neovim/lua/plugins/lsp.lua b/neovim/lua/plugins/lsp.lua index fb70337..2d93309 100644 --- a/neovim/lua/plugins/lsp.lua +++ b/neovim/lua/plugins/lsp.lua @@ -73,14 +73,25 @@ local function get_default_attach(override_capabilities) end -- Mappings - -- TODO: Maybe prefix all of these for easier discovery local opts = { noremap = true, silent = true } + local lsp_keymap = utils.swapped_map(utils.keymap_group("n", "l", opts, bufnr), function(lsp_keymap) + lsp_keymap("h", "lua vim.lsp.buf.hover()") + lsp_keymap("rn", "lua vim.lsp.buf.rename()") + lsp_keymap("e", "lua vim.lsp.diagnostics.show_line_diagnostics()") + lsp_keymap("D", "lua vim.lsp.buf.declaration()") + lsp_keymap("d", "lua vim.lsp.buf.definition()") + lsp_keymap("t", "lua vim.lsp.buf.type_definition()") + lsp_keymap("i", "lua vim.lsp.buf.implementation()") + lsp_keymap("s", "lua vim.lsp.buf.signature_help()") + lsp_keymap("wa", "lua vim.lsp.buf.add_workspace_folder()", opts) + lsp_keymap("wr", "lua vim.lsp.buf.remove_workspace_folder()", opts) + lsp_keymap("wl", "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", opts) + lsp_keymap("r", "lua vim.lsp.buf.references()", opts) + lsp_keymap("p", "lua vim.lsp.diagnostic.goto_prev()", opts) + lsp_keymap("n", "lua vim.lsp.diagnostic.goto_next()", opts) + end) - local lsp_keymap = utils.keymap_group("n", "l", opts, bufnr) - lsp_keymap("h", "lua vim.lsp.buf.hover()") - lsp_keymap("r", "lua vim.lsp.buf.rename()") - lsp_keymap("e", "lua vim.lsp.diagnostics.show_line_diagnostics()") - + -- Older keymaps buf_set_keymap("n", "gD", "lua vim.lsp.buf.declaration()", opts) buf_set_keymap("n", "gd", "lua vim.lsp.buf.definition()", opts) buf_set_keymap("n", "K", "lua vim.lsp.buf.hover()", opts) @@ -132,9 +143,21 @@ local function get_default_attach(override_capabilities) end -- Some override some fuzzy finder bindings to use lsp sources - if utils.try_require("telescope.nvim") ~= nil then + if utils.try_require("telescope") ~= nil then + -- Replace some Telescope bindings with LSP versions buf_set_keymap("n", "t", "Telescope lsp_document_symbols", opts) buf_set_keymap("n", "ft", "Telescope lsp_dynamic_workspace_symbols", opts) + buf_set_keymap("n", "ft", "Telescope lsp_dynamic_workspace_symbols", opts) + + -- Replace some LSP bindings with Telescope ones + lsp_keymap("d", "Telescope lsp_definitions") + lsp_keymap("t", "Telescope lsp_type_definition()") + lsp_keymap("i", "Telescope lsp_implementations") + lsp_keymap("r", "Telescope lsp_references") + lsp_keymap("A", "Telescope lsp_code_actions") + + buf_set_keymap("n", "ca", "Telescope lsp_code_actions", opts) + buf_set_keymap("v", "lA", "Telescope lsp_range_code_actions", opts) end -- Use LspSaga features, if possible diff --git a/neovim/lua/utils.lua b/neovim/lua/utils.lua index 814c933..dc3d250 100644 --- a/neovim/lua/utils.lua +++ b/neovim/lua/utils.lua @@ -200,6 +200,13 @@ function M.map_version_rule(rules) return latest_value end +-- Basically the oposite of map +function M.swapped_map(v, func) + func(v) + return func +end + +-- Returns a function used to create keymaps with consistent prefixes function M.keymap_group(mode, prefix, opts, bufnr) local map_fn = vim.api.nvim_set_keymap if bufnr ~= nil then