From 743c933a9b23dfa181a9eaddf1141524b3e384d7 Mon Sep 17 00:00:00 2001 From: Tyler Kelley Date: Wed, 15 May 2024 13:59:17 -0500 Subject: [PATCH] Adding cmp or completion back and better this time for neovim --- config/nvim/plugins/cmp.lua | 82 +++++++++++++++++-------------------- hosts/familypc/home.nix | 7 ++++ 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/config/nvim/plugins/cmp.lua b/config/nvim/plugins/cmp.lua index cf2b7a7..40d2cd7 100644 --- a/config/nvim/plugins/cmp.lua +++ b/config/nvim/plugins/cmp.lua @@ -1,46 +1,40 @@ -local cmp = require('cmp') -local luasnip = require('luasnip') +local cmp = require("cmp") +local luasnip = require("luasnip") +local lspkind = require("lspkind") -require('luasnip.loaders.from_vscode').lazy_load() -luasnip.config.setup {} +-- loads vscode style snippets from installed plugins (e.g. friendly-snippets) +require("luasnip.loaders.from_vscode").lazy_load() -cmp.setup { - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - mapping = cmp.mapping.preset.insert { - [''] = cmp.mapping.select_next_item(), - [''] = cmp.mapping.select_prev_item(), - [''] = 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_locally_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.locally_jumpable(-1) then - luasnip.jump(-1) - else - fallback() - end - end, { 'i', 's' }), - }, - sources = { - { name = 'nvim_lsp' }, - { name = 'luasnip' }, - }, -} +cmp.setup({ + completion = { + completeopt = "menu,menuone,preview,noselect", + }, + snippet = { -- configure how nvim-cmp interacts with snippet engine + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_prev_item(), -- previous suggestion + [""] = cmp.mapping.select_next_item(), -- next suggestion + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + [""] = cmp.mapping.complete(), -- show completion suggestions + [""] = cmp.mapping.abort(), -- close completion window + [""] = cmp.mapping.confirm({ select = false }), + }), + -- sources for autocompletion + sources = cmp.config.sources({ + { name = "luasnip" }, -- snippets + { name = "buffer" }, -- text within current buffer + { name = "path" }, -- file system paths + }), + + -- configure lspkind for vs-code like pictograms in completion menu + formatting = { + format = lspkind.cmp_format({ + maxwidth = 50, + ellipsis_char = "...", + }), + }, +}) diff --git a/hosts/familypc/home.nix b/hosts/familypc/home.nix index 59f4d83..fc3f532 100644 --- a/hosts/familypc/home.nix +++ b/hosts/familypc/home.nix @@ -191,6 +191,12 @@ in nvim-treesitter.withAllGrammars lualine-nvim nvim-web-devicons + nvim-cmp + cmp-buffer + luasnip + cmp_luasnip + friendly-snippets + lspkind-nvim comment-nvim { plugin = dracula-nvim; @@ -209,6 +215,7 @@ in ${builtins.readFile ../../config/nvim/keymaps.lua} ${builtins.readFile ../../config/nvim/plugins/alpha.lua} ${builtins.readFile ../../config/nvim/plugins/auto-session.lua} + ${builtins.readFile ../../config/nvim/plugins/cmp.lua} ${builtins.readFile ../../config/nvim/plugins/nvim-tree.lua} ${builtins.readFile ../../config/nvim/plugins/telescope.lua} ${builtins.readFile ../../config/nvim/plugins/treesitter.lua}