summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/wacky/plugins/nvim-cmp.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/wacky/plugins/nvim-cmp.lua')
-rw-r--r--.config/nvim/lua/wacky/plugins/nvim-cmp.lua61
1 files changed, 61 insertions, 0 deletions
diff --git a/.config/nvim/lua/wacky/plugins/nvim-cmp.lua b/.config/nvim/lua/wacky/plugins/nvim-cmp.lua
new file mode 100644
index 0000000..5911160
--- /dev/null
+++ b/.config/nvim/lua/wacky/plugins/nvim-cmp.lua
@@ -0,0 +1,61 @@
+local cmp_status, cmp = pcall(require, "cmp")
+if not cmp_status then
+ return
+end
+
+local luasnip_status, luasnip = pcall(require, "luasnip")
+if not luasnip_status then
+ return
+end
+
+-- import lspkind plugin safely
+local lspkind_status, lspkind = pcall(require, "lspkind")
+if not lspkind_status then
+ return
+end
+
+-- load vs-code like snippets from plugins (e.g. friendly-snippets)
+require("luasnip/loaders/from_vscode").lazy_load()
+
+vim.opt.completeopt = "menu,menuone,noselect"
+
+cmp.setup({
+ snippet = {
+ 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" }, -- lsp
+ { name = "luasnip" }, -- snippets
+ { name = "buffer" }, -- text within current buffer
+ { name = "path" }, -- file system paths
+ { name = "spell" }, -- spell checker
+ { name = "treesitter" },
+ }),
+ -- configure lspkind for vs-code like icons
+ formatting = {
+ format = lspkind.cmp_format({
+ maxwidth = 50,
+ ellipsis_char = "...",
+ }),
+ },
+})
+
+-- setup for vim-dadbod
+cmp.setup.filetype({ "sql" }, {
+ sources = {
+ { name = "vim-dadbod-completion" },
+ { name = "buffer" },
+ },
+})