require'lspinstall'.setup() local u = require('utils') local nvim_lsp = require'lspconfig' 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') local opts = { noremap=true, silent=true } buf_set_keymap('n', '', ':lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', ':lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gD', ':lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', ':lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', '1gD', ':lua vim.lsp.buf.type_definition()', opts) buf_set_keymap('n', 'gr', ':lua vim.lsp.buf.references()', opts) buf_set_keymap('n', 'g0', ':lua vim.lsp.buf.document_symbol()', opts) buf_set_keymap('n', 'gW', ':lua vim.lsp.buf.workspace_symbol()', opts) buf_set_keymap('n', 'gd', ':lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'ga', ':lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'ff', ':lua vim.lsp.buf.formatting()', opts) buf_set_keymap('n', 'gn', 'lua vim.lsp.buf.rename()', opts) --require'completion'.on_attach(client) -- Set highlight colors local highlights = { Error = "Red", Warning = "Yellow", Information = "Blue", Hint = "Green", } for typ, color in pairs(highlights) do u.hi('LspDiagnosticsDefault'..typ, {ctermfg = color}) u.hi('LspDiagnosticsUnderline'..typ, {cterm = 'underline'}) end vim.lsp.handlers['textDocument/publishDiagnostics'] = vim.lsp.with( vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = true, signs = true, update_in_insert = true, underline = true } ) end -- nvim-cmp supports additional completion capabilities local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) local servers = require'lspinstall'.installed_servers() for _, lsp in ipairs(servers) do local config = { on_attach = on_attach, capabilities = capabilities, flags = {debounce_text_changes = 150} } if lsp == "lua" then config.settings = require'lsp.lua' end nvim_lsp[lsp].setup(config) end -- Set completeopt to have a better completion experience vim.o.completeopt = 'menuone,noselect'