From 3e3d394d014dded76e3aac9a615f5efa93dd1c59 Mon Sep 17 00:00:00 2001 From: sommerfeld Date: Fri, 17 Apr 2026 10:53:11 +0100 Subject: refactor: consolidate LspAttach handlers into single callback Two separate LspAttach handlers existed in autocmds.lua and search.lua, fragmenting LSP behavior across files. Merge fzf-lua LSP navigation mappings into the main LspAttach handler in autocmds.lua using lazy require('fzf-lua'). This makes all LSP-on-attach behavior visible in one place. --- home/.config/nvim/after/plugin/autocmds.lua | 41 +++++++++++++++++- home/.config/nvim/lua/plugins/search.lua | 64 ----------------------------- 2 files changed, 40 insertions(+), 65 deletions(-) diff --git a/home/.config/nvim/after/plugin/autocmds.lua b/home/.config/nvim/after/plugin/autocmds.lua index 1db318d..c97389f 100644 --- a/home/.config/nvim/after/plugin/autocmds.lua +++ b/home/.config/nvim/after/plugin/autocmds.lua @@ -128,7 +128,7 @@ autocmd("LspAttach", { local bufnr = event.buf local function map(mode, l, r, desc) - vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc }) + vim.keymap.set(mode, l, r, { buffer = bufnr, desc = "LSP: " .. desc }) end local function nmap(l, r, desc) map("n", l, r, desc) @@ -136,6 +136,45 @@ autocmd("LspAttach", { nmap("", vim.lsp.buf.definition, "Goto definition") nmap("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") + -- fzf-lua LSP navigation + local fzf = require("fzf-lua") + nmap("gd", fzf.lsp_definitions, "[G]oto [D]efinition") + nmap("gvd", function() + fzf.lsp_definitions({ jump1_action = fzf.actions.file_vsplit }) + end, "[G]oto in a [V]ertical split to [D]efinition") + nmap("gxd", function() + fzf.lsp_definitions({ jump1_action = fzf.actions.file_split }) + end, "[G]oto in a [X]horizontal split to [D]efinition") + nmap("gtd", function() + fzf.lsp_definitions({ jump1_action = fzf.actions.file_tabedit }) + end, "[G]oto in a [T]ab to [D]efinition") + nmap("D", fzf.lsp_typedefs, "Type [D]efinition") + nmap("vD", function() + fzf.lsp_typedefs({ jump1_action = fzf.actions.file_vsplit }) + end, "Open in a [V]ertical split Type [D]efinition") + nmap("xD", function() + fzf.lsp_typedefs({ jump1_action = fzf.actions.file_split }) + end, "Open in a [X]horizontal split Type [D]efinition") + nmap("tD", function() + fzf.lsp_typedefs({ jump1_action = fzf.actions.file_tabedit }) + end, "Open in a [T]ab Type [D]efinition") + nmap("gri", fzf.lsp_implementations, "[G]oto [I]mplementation") + nmap("grvi", function() + fzf.lsp_implementations({ jump1_action = fzf.actions.file_vsplit }) + end, "[G]oto in a [V]ertical split to [I]mplementation") + nmap("grxi", function() + fzf.lsp_implementations({ jump1_action = fzf.actions.file_split }) + end, "[G]oto in a [X]horizontal split to [I]mplementation") + nmap("grti", function() + fzf.lsp_implementations({ jump1_action = fzf.actions.file_tabedit }) + end, "[G]oto in a [T]ab to [I]mplementation") + nmap("grr", fzf.lsp_references, "[G]oto [R]eferences") + nmap("ic", fzf.lsp_incoming_calls, "[I]ncoming [C]alls") + nmap("oc", fzf.lsp_outgoing_calls, "[O]utgoing [C]alls") + nmap("gO", fzf.lsp_document_symbols, "d[O]ocument symbols") + nmap("ws", fzf.lsp_live_workspace_symbols, "[W]orkspace [S]ymbols") + nmap("wd", fzf.diagnostics_workspace, "[W]orkspace [D]iagnostics") + -- Highlight references under cursor local client = vim.lsp.get_client_by_id(event.data.client_id) if diff --git a/home/.config/nvim/lua/plugins/search.lua b/home/.config/nvim/lua/plugins/search.lua index 40d8395..814cfef 100644 --- a/home/.config/nvim/lua/plugins/search.lua +++ b/home/.config/nvim/lua/plugins/search.lua @@ -113,70 +113,6 @@ return { }, }, }) - vim.api.nvim_create_autocmd("LspAttach", { - callback = function(event) - local bnmap = function(keys, func, desc) - vim.keymap.set( - "n", - keys, - func, - { buffer = event.buf, desc = "LSP: " .. desc } - ) - end - bnmap("gd", fzflua.lsp_definitions, "[G]oto [D]efinition") - bnmap("gvd", function() - fzflua.lsp_definitions({ jump1_action = fzflua.actions.file_vsplit }) - end, "[G]oto in a [V]ertical split to [D]efinition") - bnmap("gxd", function() - fzflua.lsp_definitions({ jump1_action = fzflua.actions.file_split }) - end, "[G]oto in a [X]horizontal split to [D]efinition") - bnmap("gtd", function() - fzflua.lsp_definitions({ - jump1_action = fzflua.actions.file_tabedit, - }) - end, "[G]oto in a [T]ab to [D]efinition") - bnmap("D", fzflua.lsp_typedefs, "Type [D]efinition") - bnmap("vD", function() - fzflua.lsp_typedefs({ jump1_action = fzflua.actions.file_vsplit }) - end, "Open in a [V]ertical split Type [D]efinition") - bnmap("xD", function() - fzflua.lsp_typedefs({ jump1_action = fzflua.actions.file_split }) - end, "Open in a [X]horizontal split Type [D]efinition") - bnmap("tD", function() - fzflua.lsp_typedefs({ jump1_action = fzflua.actions.file_tabedit }) - end, "Open in a [T]ab Type [D]efinition") - bnmap("gri", fzflua.lsp_implementations, "[G]oto [I]mplementation") - bnmap("grvi", function() - fzflua.lsp_implementations({ - jump1_action = fzflua.actions.file_vsplit, - }) - end, "[G]oto in a [V]ertical split to [I]mplementation") - bnmap("grxi", function() - fzflua.lsp_implementations({ - jump1_action = fzflua.actions.file_split, - }) - end, "[G]oto in a [X]horizontal split to [I]mplementation") - bnmap("grti", function() - fzflua.lsp_implementations({ - jump1_action = fzflua.actions.file_tabedit, - }) - end, "[G]oto in a [T]ab to [I]mplementation") - bnmap("grr", fzflua.lsp_references, "[G]oto [R]eferences") - bnmap("ic", fzflua.lsp_incoming_calls, "[I]ncoming [C]alls") - bnmap("oc", fzflua.lsp_outgoing_calls, "[O]utgoing [C]alls") - bnmap("gO", fzflua.lsp_document_symbols, "d[O]ocument symbols") - bnmap( - "ws", - fzflua.lsp_live_workspace_symbols, - "[W]orkspace [S]ymbols" - ) - bnmap( - "wd", - fzflua.diagnostics_workspace, - "[W]orkspace [D]iagnostics" - ) - end, - }) fzflua.register_ui_select() end, }, -- cgit v1.2.3-70-g09d2