local M = {} function M.config() local status_lsp_installer_ok, lsp_installer = pcall(require, "nvim-lsp-installer") if not status_lsp_installer_ok then return end local function lsp_highlight_document(client) if client.resolved_capabilities.document_highlight then vim.api.nvim_exec( [[ augroup lsp_document_highlight autocmd! * autocmd CursorHold lua vim.lsp.buf.document_highlight() autocmd CursorMoved lua vim.lsp.buf.clear_references() augroup END ]], false ) end end local function lsp_keymaps(bufnr) local opts = { noremap = true, silent = true } vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "lua vim.lsp.buf.declaration()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "lua vim.lsp.buf.implementation()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "go", "lua vim.diagnostic.open_float()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", 'lua vim.diagnostic.goto_prev({ border = "rounded" })', opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", 'lua vim.diagnostic.goto_next({ border = "rounded" })', opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "ll", "lua vim.diagnostic.setloclist()", opts) vim.api.nvim_buf_set_keymap(bufnr, "n", "lf", "lua vim.lsp.buf.formatting_sync()", opts) --vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]] end local on_attach = function(client, bufnr) if client.name == "tsserver" then client.resolved_capabilities.document_formatting = false end if client.name == "jsonls" then client.resolved_capabilities.document_formatting = false end if client.name == "html" then client.resolved_capabilities.document_formatting = false end if client.name == "sumneko_lua" then client.resolved_capabilities.document_formatting = false end lsp_keymaps(bufnr) lsp_highlight_document(client) end local client_capabilities = vim.lsp.protocol.make_client_capabilities() -- Add cmp_nvim_lsp capabilities local status_cmp_nvim_lsp_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") if not status_cmp_nvim_lsp_ok then return end local capabilities = cmp_nvim_lsp.update_capabilities(client_capabilities) lsp_installer.on_server_ready(function(server) local opts = server:get_default_options() opts.on_attach = on_attach opts.capabilities = capabilities opts.settings = { Lua = { diagnostics = { globals = { 'vim' } } } } server:setup(opts) end) end return M