nvim: Switch to nvim-cmp
nvim-compe has been deprecated. While we tried to make it a few days without any completion support, in javascript/typescript could not get the default omnicompletion to work at all. It is possible that this could be due to nvim-lsp-ts-utils/null-ls but who is gonna debug. Also tried MUcomplete but it just would not work. There are open issues on this. See https://github.com/neovim/neovim/issues/12390 and also https://github.com/lifepillar/vim-mucomplete/issues/179. So here we are with nvim-cmp. Some observations in comparison to compe before. Using buffer completion seems not possible as most of the times LSP completion items then do not turn up. Do not know if this is server specific but at least it is the case with Rust. compe seemed better performance wise especially in tsserver and considering the buffer problem mentioned above. Also, even with vsnip added as the completion source can't seem to get any snippet specific completions working. Could have ditched all completion support if I did not have to use tsserver but need it for work currently. So we will stick to enabling this and hopefully it improves in future. Fuck nodejs, javascript and typescript. For references see, https://github.com/kristijanhusak/neovim-config https://github.com/sQVe/dotfiles/tree/master/config/nvim
This commit is contained in:
parent
b95a14b8d1
commit
be02b5ead7
4 changed files with 68 additions and 84 deletions
54
nvim/.config/nvim/after/plugin/cmp.lua
Normal file
54
nvim/.config/nvim/after/plugin/cmp.lua
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
local cmp = require 'cmp'
|
||||||
|
local lspkind = require 'lspkind'
|
||||||
|
|
||||||
|
cmp.setup {
|
||||||
|
formatting = {
|
||||||
|
format = function(entry, vim_item)
|
||||||
|
vim_item.menu = ({
|
||||||
|
buffer = '[Buffer]',
|
||||||
|
nvim_lsp = '[Lsp]',
|
||||||
|
nvim_lua = '[Lua]',
|
||||||
|
path = '[Path]',
|
||||||
|
vsnip = '[Snippet]',
|
||||||
|
})[entry.source.name]
|
||||||
|
vim_item.kind = lspkind.presets.default[vim_item.kind]
|
||||||
|
return vim_item
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
snippet = {
|
||||||
|
expand = function (args)
|
||||||
|
vim.fn["vsnip#anonymous"](args.body)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
documentation = {
|
||||||
|
border = 'rounded'
|
||||||
|
},
|
||||||
|
mapping = {
|
||||||
|
['<CR>'] = cmp.mapping.confirm({
|
||||||
|
behavior = cmp.ConfirmBehavior.Replace,
|
||||||
|
select = true
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
{
|
||||||
|
name = 'nvim_lsp',
|
||||||
|
priority = 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = 'vsnip',
|
||||||
|
priority = 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = 'nvim_lua',
|
||||||
|
priority = 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = 'buffer',
|
||||||
|
priority = 20
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = 'path',
|
||||||
|
priority = 5
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,82 +0,0 @@
|
||||||
local remap = vim.api.nvim_set_keymap
|
|
||||||
|
|
||||||
require'compe'.setup {
|
|
||||||
enabled = true;
|
|
||||||
autocomplete = false;
|
|
||||||
debug = false;
|
|
||||||
min_length = 1;
|
|
||||||
preselect = 'enable';
|
|
||||||
throttle_time = 80;
|
|
||||||
source_timeout = 200;
|
|
||||||
resolve_timeout = 800;
|
|
||||||
incomplete_delay = 400;
|
|
||||||
max_abbr_width = 100;
|
|
||||||
max_kind_width = 100;
|
|
||||||
max_menu_width = 100;
|
|
||||||
documentation = {
|
|
||||||
border = { '', '' ,'', ' ', '', '', '', ' ' },
|
|
||||||
winhighlight = "NormalFloat:CompeDocumentation,FloatBorder:CompeDocumentationBorder",
|
|
||||||
max_width = 120,
|
|
||||||
min_width = 60,
|
|
||||||
max_height = math.floor(vim.o.lines * 0.3),
|
|
||||||
min_height = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
source = {
|
|
||||||
path = true;
|
|
||||||
buffer = true;
|
|
||||||
calc = true;
|
|
||||||
nvim_lsp = true;
|
|
||||||
nvim_lua = true;
|
|
||||||
omni = false;
|
|
||||||
spell = true;
|
|
||||||
tags = false;
|
|
||||||
treesitter = true;
|
|
||||||
snippets_nvim = false;
|
|
||||||
vsnip = true;
|
|
||||||
ultisnips = false;
|
|
||||||
luasnip = false;
|
|
||||||
emoji = false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
local t = function(str)
|
|
||||||
return vim.api.nvim_replace_termcodes(str, true, true, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
local check_back_space = function()
|
|
||||||
local col = vim.fn.col('.') - 1
|
|
||||||
if col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Use (S-)tab to:
|
|
||||||
-- Move to prev/next item in completion menuone
|
|
||||||
|
|
||||||
_G.tab_complete = function()
|
|
||||||
if vim.fn.pumvisible() == 1 then
|
|
||||||
return t "<C-n>"
|
|
||||||
elseif vim.fn.call("vsnip#available", {1}) == 1 then
|
|
||||||
return t "<Plug>(vsnip-expand-or-jump)"
|
|
||||||
elseif check_back_space() then
|
|
||||||
return t "<Tab>"
|
|
||||||
else
|
|
||||||
return vim.fn['compe#complete']()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
_G.s_tab_complete = function()
|
|
||||||
if vim.fn.pumvisible() == 1 then
|
|
||||||
return t "<C-p>"
|
|
||||||
else
|
|
||||||
return t "<S-Tab>"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
remap("i", "<Tab>", "v:lua.tab_complete()", {expr = true})
|
|
||||||
remap("s", "<Tab>", "v:lua.tab_complete()", {expr = true})
|
|
||||||
remap("i", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true})
|
|
||||||
remap("s", "<S-Tab>", "v:lua.s_tab_complete()", {expr = true})
|
|
|
@ -168,7 +168,7 @@ function set_snippet_capabilities()
|
||||||
'additionalTextEdits',
|
'additionalTextEdits',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return capabilities
|
return require('cmp_nvim_lsp').update_capabilities(capabilities)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- This should be called only once, so cannot be in on_attach as earlier.
|
-- This should be called only once, so cannot be in on_attach as earlier.
|
||||||
|
@ -188,6 +188,7 @@ end
|
||||||
|
|
||||||
nvim_lsp.clangd.setup {
|
nvim_lsp.clangd.setup {
|
||||||
on_attach = on_attach,
|
on_attach = on_attach,
|
||||||
|
capabilities = set_snippet_capabilities(),
|
||||||
default_config = {
|
default_config = {
|
||||||
cmd = { "clangd", "--background-index", "--pch-storage=memory", "--clang-tidy", "--suggest-missing-includes" },
|
cmd = { "clangd", "--background-index", "--pch-storage=memory", "--clang-tidy", "--suggest-missing-includes" },
|
||||||
filetypes = { 'c', 'cpp' },
|
filetypes = { 'c', 'cpp' },
|
||||||
|
@ -283,6 +284,7 @@ table.insert(runtime_path, "lua/?/init.lua")
|
||||||
nvim_lsp.sumneko_lua.setup {
|
nvim_lsp.sumneko_lua.setup {
|
||||||
cmd = { "/usr/bin/lua-language-server" };
|
cmd = { "/usr/bin/lua-language-server" };
|
||||||
on_attach = on_attach,
|
on_attach = on_attach,
|
||||||
|
capabilities = set_snippet_capabilities(),
|
||||||
settings = {
|
settings = {
|
||||||
Lua = {
|
Lua = {
|
||||||
runtime = {
|
runtime = {
|
||||||
|
|
|
@ -19,7 +19,17 @@ local init = function ()
|
||||||
-- Manage Project sessions
|
-- Manage Project sessions
|
||||||
use 'thaerkh/vim-workspace'
|
use 'thaerkh/vim-workspace'
|
||||||
-- For autocompletion
|
-- For autocompletion
|
||||||
use 'hrsh7th/nvim-compe'
|
use {
|
||||||
|
'hrsh7th/nvim-cmp',
|
||||||
|
requires = {
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
'hrsh7th/cmp-nvim-lua',
|
||||||
|
'hrsh7th/cmp-buffer',
|
||||||
|
'hrsh7th/cmp-vsnip',
|
||||||
|
'hrsh7th/cmp-path',
|
||||||
|
'onsails/lspkind-nvim'
|
||||||
|
}
|
||||||
|
}
|
||||||
-- Git support
|
-- Git support
|
||||||
use 'lewis6991/gitsigns.nvim'
|
use 'lewis6991/gitsigns.nvim'
|
||||||
use 'tpope/vim-fugitive'
|
use 'tpope/vim-fugitive'
|
||||||
|
|
Loading…
Reference in a new issue