diff options
| author | seth <[email protected]> | 2022-08-24 15:37:06 -0400 |
|---|---|---|
| committer | seth <[email protected]> | 2022-08-24 15:37:06 -0400 |
| commit | 8fef927ede6733c20a53c4b0c13d2ab4cb08b604 (patch) | |
| tree | c5eae97847773355ffd3f2afcc84c7c9c2a5b387 /.config/nvim/lua/getchoo/lsp/config/cmp.lua | |
| parent | ee45c4211d79dfb3b62531cc4f974ac3932e5131 (diff) | |
refactor lsp config
Diffstat (limited to '.config/nvim/lua/getchoo/lsp/config/cmp.lua')
| -rw-r--r-- | .config/nvim/lua/getchoo/lsp/config/cmp.lua | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/.config/nvim/lua/getchoo/lsp/config/cmp.lua b/.config/nvim/lua/getchoo/lsp/config/cmp.lua new file mode 100644 index 0000000..bfade29 --- /dev/null +++ b/.config/nvim/lua/getchoo/lsp/config/cmp.lua @@ -0,0 +1,71 @@ +local cmp = require("cmp") +local mapping = cmp.mapping +local luasnip = require("luasnip") + +local M = {} + +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 feedkey = function(key, mode) + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) +end + +M.config = { + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + luasnip.lsp_expand(args.body) + end, + }, + mapping = mapping.preset.insert({ + ["<C-Space>"] = mapping.complete(), + ["<CR>"] = mapping.confirm({ + select = true, + }), + ["<Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif vim.fn["vsnip#available"](1) == 1 then + feedkey("<Plug>(vsnip-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) + elseif vim.fn["vsnip#available"](-1) == 1 then + feedkey("<Plug>(vsnip-jump-prev)", "") + else + fallback() + end + end, { "i", "s" }), + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "vsnip" }, + }, { + { name = "buffer" }, + }), +} + +local capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities()) +capabilities.textDocument.completion.completionItem.snippetSupport = true + +M.capabilities = capabilities + +M.on_attach = function(_, bufnr) + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") +end + +return M |
