From 86e963c4740f1e89d1ad4612dbfa07a9f85d8ac0 Mon Sep 17 00:00:00 2001 From: Oliver Hartmann Date: Fri, 10 Sep 2021 21:26:47 +0200 Subject: [PATCH] lsp highlight and some keybindings --- init.lua | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index ef4ee0a..7757a9e 100644 --- a/init.lua +++ b/init.lua @@ -49,6 +49,7 @@ utils.opt('o', 'termguicolors', true) utils.opt('o', 'splitbelow', true) utils.opt('o', 'splitright', true) utils.opt('o', 'list', true) +utils.opt('o', 'updatetime', 300) -- Highlight on yank vim.cmd 'au TextYankPost * lua vim.highlight.on_yank {on_visual = false}' @@ -88,11 +89,14 @@ utils.map('n', 'a', 'lua vim.lsp.buf.code_action()') utils.map('n', 'd', 'lua vim.lsp.buf.definition()') utils.map('n', 'e', 'lua vim.lsp.buf.declaration()') utils.map('n', 'f', 'lua vim.lsp.buf.formatting()') +utils.map('v', 'f', 'lua vim.lsp.buf.formatting()') utils.map('n', 'h', 'lua vim.lsp.buf.hover()') utils.map('n', 'm', 'lua vim.lsp.buf.rename()') -- utils.map('n', 'r', 'lua vim.lsp.buf.references()') utils.map('n', 's', 'lua vim.lsp.buf.document_symbol()') utils.map('n', '', 'lua vim.lsp.buf.workspace_symbol()') +utils.map('n', 'D', 'lua vim.lsp.buf.type_definition()') +utils.map('n', '', 'lua vim.lsp.buf.signature_help()') utils.map('n', '', ':ClangdSwitchSourceHeader') @@ -114,11 +118,60 @@ capabilities.textDocument.completion.completionItem.resolveSupport = { }, } +local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + 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) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) + buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) + buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) + buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + + -- Set some keybinds conditional on server capabilities + if client.resolved_capabilities.document_formatting then + buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) + end + if client.resolved_capabilities.document_range_formatting then + buf_set_keymap("v", "f", "lua vim.lsp.buf.range_formatting()", opts) + end + + -- Set autocommands conditional on server_capabilities + if client.resolved_capabilities.document_highlight then + vim.api.nvim_exec([[ + hi LspReferenceRead cterm=bold ctermbg=red guibg=DarkGreen + hi LspReferenceText cterm=bold ctermbg=Black guibg=DarkYellow guifg=Black + hi LspReferenceWrite cterm=bold ctermbg=red guibg=DarkRed + augroup lsp_document_highlight + autocmd! * + autocmd CursorHold lua vim.lsp.buf.document_highlight() + autocmd CursorHoldI lua vim.lsp.buf.document_highlight() + autocmd CursorMoved lua vim.lsp.buf.clear_references() + augroup END + ]], false) + end +end + -- Enable some language servers with the additional completion capabilities offered by nvim-cmp local servers = { 'clangd', 'pyright', 'rust_analyzer', 'tsserver' } for _, lsp in ipairs(servers) do nvim_lsp[lsp].setup { - -- on_attach = my_custom_on_attach, + on_attach = on_attach, capabilities = capabilities, } end