local lspconfig = require('lspconfig') local lsp_defaults = lspconfig.util.default_config lsp_defaults.capabilities = vim.tbl_deep_extend( 'force', lsp_defaults.capabilities, require('cmp_nvim_lsp').default_capabilities() ) vim.api.nvim_create_autocmd('LspAttach', { desc = 'LSP actions', callback = function(event) local opts = { buffer = event.buf } vim.keymap.set('n', 'i', 'lua vim.lsp.buf.hover()', opts) vim.keymap.set('n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.keymap.set('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.keymap.set('n', 'go', 'lua vim.lsp.buf.type_definition()', opts) vim.keymap.set('n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.keymap.set('n', 'gs', 'lua vim.lsp.buf.signature_help()', opts) vim.keymap.set('n', 'r', 'lua vim.lsp.buf.rename()', opts) vim.keymap.set('n', 'f', 'lua vim.lsp.buf.format({async=true})', opts) vim.keymap.set('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) vim.keymap.set('n', 'gl', 'lua vim.diagnostic.open_float()', opts) vim.keymap.set('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) vim.keymap.set('n', ']d', 'lua vim.diagnostic.goto_next()', opts) end }) local default_setup = function(server) lspconfig[server].setup({}) end require('mason').setup({ ui = { border = 'rounded' } }) -- Install language servers require('mason-lspconfig').setup({ ensure_installed = { 'lua_ls', 'clangd', 'pylsp', 'yamlls' }, handlers = { default_setup, pylsp = function() require('lspconfig').pylsp.setup({ settings = { pylsp = { plugins = { flake8 = { enabled = true }, autopep8 = { enabled = false }, yapf = { enabled = true, }, isort = { enabled = true }, } } } }) end }, }) local cmp = require('cmp') cmp.setup({ sources = { { name = 'nvim_lsp' }, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() else fallback() end end), [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() else fallback() end end), [''] = cmp.mapping.abort(), [''] = cmp.mapping.complete(), [''] = cmp.mapping.scroll_docs(1), [''] = cmp.mapping.scroll_docs(-1), [''] = cmp.mapping.confirm({ select = false }), }), window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, })