-- Setup nvim-cmp.lsp local cmp = require'cmp' local feedkey = function(key, mode) vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) end cmp.setup({ 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, }, window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. [""] = cmp.mapping(function(fallback) if vim.fn["vsnip#jumpable"](1) == 1 then feedkey("(vsnip-jump-next)", "") elseif cmp.visible() then cmp.select_next_item() else fallback() -- The fallback function sends a already mapped key. In this case, it's probably ``. end end, { "i", "s" }), [''] = cmp.mapping(function() if vim.fn["vsnip#jumpable"](1) == 1 then feedkey("(vsnip-jump-next)", "") elseif cmp.visible() then cmp.select_next_item() end end, { "i", "s"}), }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'vsnip' }, -- For vsnip users. -- { name = 'luasnip' }, -- For luasnip users. -- { name = 'ultisnips' }, -- For ultisnips users. -- { name = 'snippy' }, -- For snippy users. }, { { name = 'buffer' }, }) }) -- Set configuration for specific filetype. cmp.setup.filetype('gitcommit', { sources = cmp.config.sources({ { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. }, { { name = 'buffer' }, }) }) -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline('/', { mapping = cmp.mapping.preset.cmdline(), sources = { { name = 'buffer' } } }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = 'path' } }, { { name = 'cmdline' } }) }) -- Setup lspconfig. local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) require("nvim-lsp-installer").setup({ automatic_installation = true, -- automatically detect which servers to install (based on which servers are set up via lspconfig) }) require('lspconfig').pyright.setup { capabilities = capabilities } require('lspconfig').texlab.setup { capabilities = capabilities } require('lspconfig').clangd.setup { capabilities = capabilities } require('lspconfig').bashls.setup { capabilities = capabilities } require('lspconfig').cmake.setup { capabilities = capabilities } require('lspconfig').jsonls.setup { capabilities = capabilities } require('lspconfig').tsserver.setup { capabilities = capabilities } require('lspconfig').vuels.setup { capabilities = capabilities } require('lspconfig').dockerls.setup { capabilities = capabilities } require('lspconfig').vimls.setup { capabilities = capabilities } require('lspconfig').yamlls.setup { capabilities = capabilities } require('lspconfig').cssls.setup { capabilities = capabilities } require'lspconfig'.sumneko_lua.setup { settings = { Lua = { runtime = { -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) version = 'LuaJIT', }, diagnostics = { -- Get the language server to recognize the `vim` global globals = {'vim'}, }, workspace = { -- Make the server aware of Neovim runtime files library = vim.api.nvim_get_runtime_file("", true), }, -- Do not send telemetry data containing a randomized but unique identifier telemetry = { enable = false, }, }, }, } require('lspconfig').ltex.setup { capabilities = capabilities, on_attach = function(_, _) require("ltex_extra").setup{ load_langs = {"nl-BE", "en-GB"}, init_check = true, } end, settings = { ltex = { enabled = {"latex", "tex", "bib", "md", "text"}, language="en-GB", } } } vim.diagnostic.config({ virtual_text = false }) -- Show line diagnostics automatically in hover window vim.o.updatetime = 250 vim.cmd [[autocmd CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false})]] vim.api.nvim_set_keymap("n", "n", ":lua vim.diagnostic.goto_next()", { silent = true }) vim.api.nvim_set_keymap("n", "p", ":lua vim.diagnostic.goto_prev()", { silent = true }) vim.api.nvim_set_keymap("n", "f", ":lua vim.lsp.buf.code_action()", { silent = true }) vim.api.nvim_set_keymap("n", "gd", ":lua vim.lsp.buf.definition()", { silent = true }) vim.api.nvim_set_keymap("n", "gr", ":lua vim.lsp.buf.references()", { silent = true })