summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/setup/nvim-cmp.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/setup/nvim-cmp.lua')
-rw-r--r--.config/nvim/lua/setup/nvim-cmp.lua51
1 files changed, 51 insertions, 0 deletions
diff --git a/.config/nvim/lua/setup/nvim-cmp.lua b/.config/nvim/lua/setup/nvim-cmp.lua
new file mode 100644
index 0000000..584da73
--- /dev/null
+++ b/.config/nvim/lua/setup/nvim-cmp.lua
@@ -0,0 +1,51 @@
+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 luasnip = require("luasnip")
+local cmp = require("cmp")
+require("luasnip/loaders/from_vscode").lazy_load()
+vim.o.completeopt = 'menuone,noselect'
+
+cmp.setup {
+ snippet = {
+ expand = function(args)
+ require('luasnip').lsp_expand(args.body)
+ end,
+ },
+ mapping = {
+ ['<CR>'] = cmp.mapping.confirm({ select = true }),
+ ['<C-n>'] = cmp.mapping.select_next_item(),
+ ['<C-p>'] = cmp.mapping.select_prev_item(),
+ ['<C-f>'] = cmp.mapping.scroll_docs(4),
+ ['<C-d>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-e>'] = cmp.mapping.close(),
+ ["<Tab>"] = 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" }),
+
+ ["<S-Tab>"] = 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 = {
+ { name = 'nvim_lsp' },
+ { name = 'luasnip' },
+ },
+}
+vim.cmd('autocmd FileType markdown lua require("cmp").setup.buffer { enabled = false }')