lua/josean/plugins/nvim-cmp.lua (1934B)
1 return {
2 "hrsh7th/nvim-cmp",
3 event = "InsertEnter",
4 dependencies = {
5 "hrsh7th/cmp-buffer", -- source for text in buffer
6 "hrsh7th/cmp-path", -- source for file system paths
7 "L3MON4D3/LuaSnip", -- snippet engine
8 "saadparwaiz1/cmp_luasnip", -- for autocompletion
9 "rafamadriz/friendly-snippets", -- useful snippets
10 "onsails/lspkind.nvim", -- vs-code like pictograms
11 },
12 config = function()
13 local cmp = require("cmp")
14
15 local luasnip = require("luasnip")
16
17 local lspkind = require("lspkind")
18
19 -- loads vscode style snippets from installed plugins (e.g. friendly-snippets)
20 require("luasnip.loaders.from_vscode").lazy_load()
21
22 cmp.setup({
23 completion = {
24 completeopt = "menu,menuone,preview,noselect",
25 },
26 snippet = { -- configure how nvim-cmp interacts with snippet engine
27 expand = function(args)
28 luasnip.lsp_expand(args.body)
29 end,
30 },
31 mapping = cmp.mapping.preset.insert({
32 ["<C-k>"] = cmp.mapping.select_prev_item(), -- previous suggestion
33 ["<C-j>"] = cmp.mapping.select_next_item(), -- next suggestion
34 ["<C-b>"] = cmp.mapping.scroll_docs(-4),
35 ["<C-f>"] = cmp.mapping.scroll_docs(4),
36 ["<C-Space>"] = cmp.mapping.complete(), -- show completion suggestions
37 ["<C-e>"] = cmp.mapping.abort(), -- close completion window
38 ["<CR>"] = cmp.mapping.confirm({ select = false }),
39 }),
40 -- sources for autocompletion
41 sources = cmp.config.sources({
42 { name = "nvim_lsp" },
43 { name = "luasnip" }, -- snippets
44 { name = "buffer" }, -- text within current buffer
45 { name = "path" }, -- file system paths
46 }),
47 -- configure lspkind for vs-code like pictograms in completion menu
48 formatting = {
49 format = lspkind.cmp_format({
50 maxwidth = 50,
51 ellipsis_char = "...",
52 }),
53 },
54 })
55 end,
56 }