From 2c33fbfbc02b2b4d9f1376926b10ddb9caf3243e Mon Sep 17 00:00:00 2001 From: Sijmen Date: Fri, 12 Aug 2022 02:14:31 +0200 Subject: [PATCH] neovim: lsp autocompletion --- common/home-manager.nix | 5 +++- common/nvim.lua | 56 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/common/home-manager.nix b/common/home-manager.nix index 947d881..01650f4 100644 --- a/common/home-manager.nix +++ b/common/home-manager.nix @@ -58,12 +58,15 @@ plugins = with pkgs.vimPlugins; [ bufferline-nvim + cmp-nvim-lsp + cmp_luasnip galaxyline-nvim indentLine lualine-nvim + luasnip neorg + nvim-cmp nvim-colorizer-lua - nvim-compe nvim-lspconfig nvim-tree-lua nvim-treesitter diff --git a/common/nvim.lua b/common/nvim.lua index 0970cd4..0240f15 100644 --- a/common/nvim.lua +++ b/common/nvim.lua @@ -93,9 +93,59 @@ local on_attach = function(client, bufnr) vim.keymap.set('n', 'f', vim.lsp.buf.formatting, bufopts) end + +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities) + local lspconfig = require("lspconfig") -lspconfig.rnix.setup { on_attach = on_attach } -lspconfig.pyright.setup { on_attach = on_attach } -lspconfig.rust_analyzer.setup { on_attach = on_attach } +local servers = { "rnix", "pyright", "rust_analyzer" } +for _, lsp in ipairs(servers) do + lspconfig[lsp].setup { + on_attach = on_attach, + capabilities = capabilities, + } +end + +local luasnip = require("luasnip") + +local cmp = require("cmp") +cmp.setup { + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }), + sources = { + { name = "nvim_lsp" }, + { name = "luasnip" }, + }, +} vim.api.nvim_set_keymap("n", "", ":NvimTreeToggle", { noremap = true, silent = true })