From 3a13cbc38d07143ad00c2b697648822e7d2ce284 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Wed, 16 Mar 2022 00:53:49 -0500 Subject: [PATCH] Add snippet engine for cmp --- common/neovim/lua/plugins.lua | 51 +++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/common/neovim/lua/plugins.lua b/common/neovim/lua/plugins.lua index f61425a..a6dd337 100644 --- a/common/neovim/lua/plugins.lua +++ b/common/neovim/lua/plugins.lua @@ -4,6 +4,11 @@ if #vim.fn.glob(packer_install_path) == 0 then vim.api.nvim_command'packadd packer.nvim' end +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + local packer = require'packer' packer.startup(function() local plugins = { @@ -45,21 +50,38 @@ packer.startup(function() 'nvim-lua/plenary.nvim', } }, + { + 'nvim-telescope/telescope-fzf-native.nvim', + run = 'make', + }, + { + 'tzachar/cmp-fuzzy-path', + requires = {'hrsh7th/nvim-cmp', 'tzachar/fuzzy.nvim'}, + }, -- TODO: add keymap ig for toggling these 'lukas-reineke/indent-blankline.nvim', -- indentation guide lines + 'L3MON4D3/LuaSnip', + 'neovim/nvim-lspconfig', -- language server configuration helper 'williamboman/nvim-lsp-installer', -- plugin containing installation commands for many language servers 'hrsh7th/cmp-nvim-lsp', -- add lsp to completion engine 'hrsh7th/cmp-buffer', -- add buffer information to completion engine 'hrsh7th/cmp-path', -- add filesystem information to complete enging 'hrsh7th/cmp-cmdline', -- add completion for vim commands + 'saadparwaiz1/cmp_luasnip', { -- completion engine 'hrsh7th/nvim-cmp', config = function() local cmp = require'cmp' + local luasnip = require'luasnip' cmp.setup{ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, mapping = { [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), @@ -70,16 +92,41 @@ packer.startup(function() c = cmp.mapping.close(), }, [''] = cmp.mapping.confirm{select = true}, -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + 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 = cmp.config.sources{ + sources = cmp.config.sources({ { name = 'nvim_lsp' }, + { name = 'luasnip' }, + }, { { name = 'buffer' }, - }, + { name = 'path' }, + { name = 'fuzzy_path' }, + }), } cmp.setup.cmdline('/', { sources = { {name = 'buffer'}, + {name = 'fuzzy_path'}, } })