diff --git a/home/editors/neovim/cmp.lua b/home/editors/neovim/cmp.lua new file mode 100644 index 0000000..85afd99 --- /dev/null +++ b/home/editors/neovim/cmp.lua @@ -0,0 +1,59 @@ +local cmp = require("cmp") +local luasnip = require("luasnip") + +-- vim.opt.completeopt="menuone,noinsert" -- TODO +vim.opt.completeopt="menu,menuone,noselect" +vim.opt.shortmess:append("c") + +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 + +cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = { + [""] = cmp.mapping(cmp.mapping.scroll_docs(-4), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.scroll_docs(4), { "i", "c" }), + [""] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }), + [""] = cmp.config.disable, + [""] = cmp.mapping({ + i = cmp.mapping.abort(), + c = cmp.mapping.close(), + }), + [""] = cmp.mapping.confirm({ select = true }), + [""] = 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" }), + [""] = 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 = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + }, { + { name = "buffer" }, + }) +}) + +local cmp_autopairs = require("nvim-autopairs.completion.cmp") +cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done({ map_char = { tex = "" } })) diff --git a/home/editors/neovim/default.nix b/home/editors/neovim/default.nix index 6cb4daa..27e7622 100644 --- a/home/editors/neovim/default.nix +++ b/home/editors/neovim/default.nix @@ -33,8 +33,12 @@ in { vim-test nvim-autopairs camelcasemotion - nvim-compe - vim-vsnip + luasnip + + nvim-cmp + cmp-buffer + cmp-nvim-lsp + cmp_luasnip (nvim-treesitter.withPlugins (_: pkgs.tree-sitter.allGrammars)) nvim-treesitter-context @@ -63,6 +67,7 @@ in { ./which-key.lua ./gitsigns.lua ./test.lua + ./cmp.lua ./lsp/extensions.lua ./lsp/lsp.lua ./lsp/mappings.lua diff --git a/home/editors/neovim/lsp/lsp.lua b/home/editors/neovim/lsp/lsp.lua index 43a0074..9a5d382 100644 --- a/home/editors/neovim/lsp/lsp.lua +++ b/home/editors/neovim/lsp/lsp.lua @@ -1,19 +1,3 @@ --- autocomplete config -vim.opt.completeopt="menuone,noinsert" -vim.opt.shortmess:append("c") - -require'compe'.setup { - enabled = true, - preselect = "always", - allow_prefix_unmatch = true, - source = { - path = true, - calc = true, - nvim_lsp = true, - vsnip = true, - }, -} - local pid = vim.fn.getpid() -- lightbulb @@ -34,10 +18,9 @@ end require('lspfuzzy').setup {} --- enable lsp snippets for nvim-compe - local config = require'lspconfig' -local capabilities = vim.lsp.protocol.make_client_capabilities() +local capabilities_ = vim.lsp.protocol.make_client_capabilities() +local capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities_) capabilities.textDocument.completion.completionItem.snippetSupport = true local servers = { "bashls", @@ -238,27 +221,6 @@ config.diagnosticls.setup { }, } --- nvim-autoclose & nvim-compe compatibility -local map = vim.api.nvim_set_keymap -local npairs = require('nvim-autopairs') - -npairs.setup({ +require("nvim-autopairs").setup({ check_ts = true, }) - -_G.MUtils= {} - -vim.g.completion_confirm_key = "" -MUtils.completion_confirm=function() - if vim.fn.pumvisible() ~= 0 then - if vim.fn.complete_info()["selected"] ~= -1 then - return vim.fn["compe#confirm"](npairs.esc("")) - else - return npairs.esc("") - end - else - return npairs.autopairs_cr() - end -end - -map('i' , '','v:lua.MUtils.completion_confirm()', {expr = true , noremap = true}) diff --git a/home/editors/neovim/lsp/mappings.lua b/home/editors/neovim/lsp/mappings.lua index 81f60d4..12436db 100644 --- a/home/editors/neovim/lsp/mappings.lua +++ b/home/editors/neovim/lsp/mappings.lua @@ -1,15 +1,5 @@ local map = vim.api.nvim_set_keymap -map("i", "", "compe#complete()", { noremap = true, expr = true, silent = true }) -map("i", "", "compe#confirm('')", { noremap = true, expr = true, silent = true }) -map("i", "", "compe#close('')", { noremap = true, expr = true, silent = true }) -map("i", "", "compe#scroll({ 'delta': +4 })", { noremap = true, expr = true, silent = true }) -map("i", "", "compe#scroll({ 'delta': -4 })", { noremap = true, expr = true, silent = true }) - --- Use and to navigate through popup menu -map("i", "", "pumvisible() ? '' : ''", { noremap = true, expr = true }) -map("i", "", "pumvisible() ? '' : ''", { noremap = true, expr = true }) - -- maps map("n", "gd", "lua vim.lsp.buf.definition()", { noremap = true, silent = true }) map("n", "gp", "lua peek_definition()", { noremap = true, silent = true })