return {{ "neovim/nvim-lspconfig", dependencies={ "hrsh7th/cmp-nvim-lsp", }, config=function() local servers = { 'lua_ls', 'vimls', 'bashls', 'vale_ls' } local capabilities = require('cmp_nvim_lsp').default_capabilities() for _, lsp in ipairs(servers) do require('lspconfig')[lsp].setup { capabilities = capabilities, } end -- Use LspAttach autocommand to only map the following keys -- after the language server attaches to the current buffer vim.api.nvim_create_autocmd('LspAttach', { group = vim.api.nvim_create_augroup('UserLspConfig', {}), callback = function(ev) -- Enable completion triggered by vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' -- Buffer local mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local opts = { buffer = ev.buf } vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts) vim.keymap.set('n', '', vim.lsp.buf.signature_help, opts) vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) vim.keymap.set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, opts) vim.keymap.set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts) --vim.keymap.set('n', 'f', function() -- vim.lsp.buf.format { async = true } --end, opts) end, }) end, --},{ -- "L3MON4D3/LuaSnip", -- dependencies={ -- "saadparwaiz1/cmp_luasnip", -- "rafamadriz/friendly-snippets" -- }, -- config=function () -- require("luasnip.loaders.from_vscode").lazy_load() -- end, -- keys = { -- { "", function () -- return require("luasnip").jumpable(1) and "luasnip-jump-next" or "" -- end, expr = true, silent = true, mode = "i" -- }, -- { "", function() require("luasnip").jump(1) end, mode = "s" }, -- { "", function() require("luasnip").jump(-1) end, mode = { "i", "s" } }, -- } },{ "hrsh7th/nvim-cmp", dependencies={ "neovim/nvim-lspconfig", --"L3MON4D3/LuaSnip", "saadparwaiz1/cmp_luasnip", "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "hrsh7th/cmp-cmdline", }, opts=function() local cmp = require("cmp") local capabilities = require('cmp_nvim_lsp').default_capabilities() return { snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) --vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users. require('luasnip').lsp_expand(args.body) -- For `luasnip` users. -- require('snippy').expand_snippet(args.body) -- For `snippy` users. -- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users. end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({ select = true }), }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, { name = "path" }, { name = "buffer" } }) } end }}