Neovim LspAttach autocommand
An example LspAttach autocommand I use for Neovim. Adds some keybinds but configure as desired.
We run on LspAttach
commands.
local group = vim.api.nvim_create_augroup("LspMappings", { clear = true })
vim.api.nvim_create_autocmd("LspAttach", {
group = group,
callback = function(args)
local opts = { buffer = args.buf, silent = true }
set(n, "gd", function() vim.lsp.buf.definition({}) end, opts)
set(n, "K", vim.lsp.buf.hover, opts)
set(n, "<c-s-K>", vim.lsp.buf.signature_help, opts)
set(n, "gD", function() vim.lsp.buf.implementation({}) end, opts)
set(n, "1gD", function() vim.lsp.buf.type_definition({}) end, opts)
set(n, "gr", function() vim.lsp.buf.references() end, opts)
set(n, "<c-]>", function() vim.lsp.buf.declaration({}) end, opts)
set(n, "<Leader>re", vim.lsp.buf.rename, opts)
set(n, "<Leader>ca", vim.lsp.buf.code_action, opts)
set(n, "<Leader>ih", function()
-- toggles inlay hints
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
end, opts)
-- diagnostics
set(n, "<Leader>di", vim.diagnostic.open_float, opts)
set(n, "<Leader>k", function()
vim.diagnostic.jump({ float = true, count = -1 })
end, opts)
set(n, "<Leader>j", function()
vim.diagnostic.jump({ float = true, count = 1 })
end, opts)
end,
})