diff --git a/config/nvim/lua/plugins.lua b/config/nvim/lua/plugins.lua index 01bab71..1f0a698 100644 --- a/config/nvim/lua/plugins.lua +++ b/config/nvim/lua/plugins.lua @@ -43,6 +43,53 @@ return require('packer').startup({ config = function() require('colorizer').setup() end, } + -------------------- + -- Snippets + -------------------- + use { -- snippet engine + 'L3MON4D3/LuaSnip', + requires = { + 'saadparwaiz1/cmp_luasnip', + 'rafamadriz/friendly-snippets', + }, + } + use { -- various snippets + 'rafamadriz/friendly-snippets', + after = { 'LuaSnip' }, + config = load_config('friendly-snippets'), + } + + -------------------- + -- Completion + -------------------- + use { -- nvim-cmp source for LuaSnip + 'saadparwaiz1/cmp_luasnip', + requires = { 'hrsh7th/nvim-cmp' }, + after = { 'LuaSnip' }, + } + use { -- nvim-cmp source for buffer words + 'hrsh7th/cmp-buffer', + requires = { 'hrsh7th/nvim-cmp' }, + } + use { -- nvim-cmp source for filesystem paths + 'hrsh7th/cmp-path', + requires = { 'hrsh7th/nvim-cmp' }, + } + use { -- nvim-cmp source for vim's cmdline + 'hrsh7th/cmp-cmdline', + requires = { 'hrsh7th/nvim-cmp' }, + } + use { -- completion engine + 'hrsh7th/nvim-cmp', + after = { + 'cmp-buffer', + 'cmp-path', + 'cmp-cmdline', + 'cmp_luasnip' + }, + config = load_config('nvim-cmp'), + } + -- Automatically set up your configuration after cloning packer.nvim -- Put this at the end after all plugins if packer_bootstrap then diff --git a/config/nvim/lua/plugins/friendly-snippets.lua b/config/nvim/lua/plugins/friendly-snippets.lua new file mode 100644 index 0000000..e62dc5a --- /dev/null +++ b/config/nvim/lua/plugins/friendly-snippets.lua @@ -0,0 +1 @@ +require('luasnip.loaders.from_vscode').lazy_load() diff --git a/config/nvim/lua/plugins/nvim-cmp.lua b/config/nvim/lua/plugins/nvim-cmp.lua new file mode 100644 index 0000000..b4b5ef4 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-cmp.lua @@ -0,0 +1,61 @@ +vim.opt.completeopt = 'menu,menuone,noselect' +-- make 'kind' readable with dichromatic colorscheme +vim.cmd('highlight! CmpItemKindDefault guibg=NONE guifg=#000000') + +local cmp = require('cmp') +cmp.setup({ + snippet = { + expand = function(args) + require('luasnip').lsp_expand(args.body) + end, + }, + formatting = { + format = function(entry, vim_item) + vim_item.menu = ({ + buffer = '[Buffer]', + luasnip = '[Snippet]', + })[entry.source.name] + return vim_item + 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 }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + }), + sources = cmp.config.sources({ + { name = 'nvim_lsp', keyword_length = 3 }, + { name = 'luasnip', keyword_length = 2 }, + }, { + { name = 'buffer', keyword_length = 3 }, + }) +}) + +-- configure completion for specific filetype +cmp.setup.filetype('gitcommit', { + sources = cmp.config.sources({ + { name = 'buffer' }, + }), +}) + +-- use buffer source for `/` and `?` (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' } + }), +})