summaryrefslogtreecommitdiff
path: root/lua/ben/plugins/cmp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/ben/plugins/cmp.lua')
-rw-r--r--lua/ben/plugins/cmp.lua56
1 files changed, 56 insertions, 0 deletions
diff --git a/lua/ben/plugins/cmp.lua b/lua/ben/plugins/cmp.lua
new file mode 100644
index 0000000..2038540
--- /dev/null
+++ b/lua/ben/plugins/cmp.lua
@@ -0,0 +1,56 @@
+return {
+ "hrsh7th/nvim-cmp",
+ event = "InsertEnter",
+ dependencies = {
+ "hrsh7th/cmp-buffer", -- source for text in buffer
+ "hrsh7th/cmp-path", -- source for file system paths
+ "L3MON4D3/LuaSnip", -- snippet engine
+ "saadparwaiz1/cmp_luasnip", -- for autocompletion
+ "rafamadriz/friendly-snippets", -- useful snippets
+ "onsails/lspkind.nvim", -- vs-code like pictograms
+ },
+ config = function()
+ local cmp = require("cmp")
+
+ local luasnip = require("luasnip")
+
+ local lspkind = require("lspkind")
+
+ -- loads vscode style snippets from installed plugins (e.g. friendly-snippets)
+ require("luasnip.loaders.from_vscode").lazy_load()
+
+ 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({
+ ["<C-k>"] = cmp.mapping.select_prev_item(), -- previous suggestion
+ ["<C-j>"] = cmp.mapping.select_next_item(), -- next suggestion
+ ["<C-b>"] = cmp.mapping.scroll_docs(-4),
+ ["<C-f>"] = cmp.mapping.scroll_docs(4),
+ ["<C-Space>"] = cmp.mapping.complete(), -- show completion suggestions
+ ["<C-e>"] = cmp.mapping.abort(), -- close completion window
+ ["<CR>"] = cmp.mapping.confirm({ select = false }),
+ }),
+ -- sources for autocompletion
+ sources = cmp.config.sources({
+ { name = "nvim_lsp" },
+ { 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 = "...",
+ }),
+ },
+ })
+ end,
+}