local lsp_installer = require("nvim-lsp-installer") 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", "gd", ":lua vim.lsp.buf.definition()", opts) --> jumps to the definition of the symbol under the cursor buf_set_keymap("n", "lh", ":lua vim.lsp.buf.hover()", opts) --> information about the symbol under the cursos in a floating window buf_set_keymap("n", "gi", ":lua vim.lsp.buf.implementation()", opts) --> lists all the implementations for the symbol under the cursor in the quickfix window buf_set_keymap("n", "rn", ":lua vim.lsp.util.rename()", opts) --> renaname old_fname to new_fname buf_set_keymap("n", "ca", ":lua vim.lsp.buf.code_action()", opts) --> selects a code action available at the current cursor position buf_set_keymap("n", "gr", ":lua vim.lsp.buf.references()", opts) --> lists all the references to the symbl under the cursor in the quickfix window buf_set_keymap("n", "ld", ":lua vim.diagnostic.open_float()", opts) buf_set_keymap("n", "[d", ":lua vim.diagnostic.goto_prev()", opts) buf_set_keymap("n", "]d", ":lua vim.diagnostic.goto_next()", opts) buf_set_keymap("n", "lq", ":lua vim.diagnostic.setloclist()", opts) buf_set_keymap("n", "lf", ":lua vim.lsp.buf.formatting()", opts) --> formats the current buffer end local servers = { --"bashls", --"cssls", --"eslint", --"ltex", "sumneko_lua", --"tsserver", --"pyright", "jedi_language_server", } ---@diagnostic disable-next-line: undefined-global local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require("cmp_nvim_lsp").default_capabilities(capabilities) for _, name in pairs(servers) do local server_is_found, server = lsp_installer.get_server(name) if server_is_found then if not server:is_installed() then print("Installing " .. name) server:install() end end end lsp_installer.on_server_ready(function(server) -- Specify the default options which we'll use to setup all servers local default_opts = { on_attach = on_attach, capabilities = capabilities, } server:setup(default_opts) end)