nvim: Switch to lsp-zero
lsp-zero offers a simple to set-up lsp configuration which is based around the plugins I use anyway (lsp, cmp, luasnip) but integrates them very well. I add a few small quality of life things on top (cmp completion for / search and for vim command mode) as well as a boatload of custom completion sources but otherwise make use of the nice presets. This has de-bloated my _cmp.lua settings somewhat and allows me to have a simple treesitter and a simple(r) lsp setup! Additionally, switched to mason.nvim to manage my lsp sources (and linters), which is both the new hotness and actually really useful. Allows portable installation of most lsp servers into neovim data directory so they do not clutter any other directories or global namespaces.
This commit is contained in:
parent
ee4640b186
commit
2026f6d064
3 changed files with 137 additions and 195 deletions
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"BetterLua.vim": { "branch": "master", "commit": "d2d6c115575d09258a794a6f20ac60233eee59d5" },
|
"BetterLua.vim": { "branch": "master", "commit": "d2d6c115575d09258a794a6f20ac60233eee59d5" },
|
||||||
|
"LuaSnip": { "branch": "master", "commit": "500981ff6cefc7343e3959ef0f939bd0bfd49ba9" },
|
||||||
"Navigator.nvim": { "branch": "master", "commit": "91d86506ac2a039504d5205d32a1d4bc7aa57072" },
|
"Navigator.nvim": { "branch": "master", "commit": "91d86506ac2a039504d5205d32a1d4bc7aa57072" },
|
||||||
"bats.vim": { "branch": "master", "commit": "6a5d2ef22b0ede503d867770afd02ebb1f97b709" },
|
"bats.vim": { "branch": "master", "commit": "6a5d2ef22b0ede503d867770afd02ebb1f97b709" },
|
||||||
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
||||||
|
@ -12,7 +13,7 @@
|
||||||
"cmp-spell": { "branch": "master", "commit": "60584cb75e5e8bba5a0c9e4c3ab0791e0698bffa" },
|
"cmp-spell": { "branch": "master", "commit": "60584cb75e5e8bba5a0c9e4c3ab0791e0698bffa" },
|
||||||
"cmp-tmux": { "branch": "main", "commit": "984772716f66d8ee88535a6bf3f94c4b4e1301f5" },
|
"cmp-tmux": { "branch": "main", "commit": "984772716f66d8ee88535a6bf3f94c4b4e1301f5" },
|
||||||
"cmp-treesitter": { "branch": "master", "commit": "b40178b780d547bcf131c684bc5fd41af17d05f2" },
|
"cmp-treesitter": { "branch": "master", "commit": "b40178b780d547bcf131c684bc5fd41af17d05f2" },
|
||||||
"cmp-vsnip": { "branch": "main", "commit": "989a8a73c44e926199bfd05fa7a516d51f2d2752" },
|
"cmp_luasnip": { "branch": "master", "commit": "18095520391186d634a0045dacaa346291096566" },
|
||||||
"completion-vcard": { "branch": "master", "commit": "2220fd517a985ececed1adcf0e5be8f2815564c7" },
|
"completion-vcard": { "branch": "master", "commit": "2220fd517a985ececed1adcf0e5be8f2815564c7" },
|
||||||
"dial.nvim": { "branch": "master", "commit": "5020da900cc5dfd7067f181ee2ebd872ca7c84e8" },
|
"dial.nvim": { "branch": "master", "commit": "5020da900cc5dfd7067f181ee2ebd872ca7c84e8" },
|
||||||
"formatter.nvim": { "branch": "master", "commit": "8a4c961330cc4688087f23d18fa7d2f1af9a4902" },
|
"formatter.nvim": { "branch": "master", "commit": "8a4c961330cc4688087f23d18fa7d2f1af9a4902" },
|
||||||
|
@ -21,11 +22,14 @@
|
||||||
"guihua.lua": { "branch": "master", "commit": "d3f6d01639b52e6a83ea98dd6ca244c9aa98b79b" },
|
"guihua.lua": { "branch": "master", "commit": "d3f6d01639b52e6a83ea98dd6ca244c9aa98b79b" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "273081443471cbc52c327bcb99614c32f247998d" },
|
"lazy.nvim": { "branch": "main", "commit": "273081443471cbc52c327bcb99614c32f247998d" },
|
||||||
"lightspeed.nvim": { "branch": "main", "commit": "299eefa6a9e2d881f1194587c573dad619fdb96f" },
|
"lightspeed.nvim": { "branch": "main", "commit": "299eefa6a9e2d881f1194587c573dad619fdb96f" },
|
||||||
|
"lsp-format.nvim": { "branch": "master", "commit": "ca0df5c8544e51517209ea7b86ecc522c98d4f0a" },
|
||||||
|
"lsp-zero.nvim": { "branch": "main", "commit": "42bc5a1081666098a7154532e6ff5e3edc483b39" },
|
||||||
"lsp_signature.nvim": { "branch": "master", "commit": "6f6252f63b0baf0f2224c4caea33819a27f3f550" },
|
"lsp_signature.nvim": { "branch": "master", "commit": "6f6252f63b0baf0f2224c4caea33819a27f3f550" },
|
||||||
"lspkind-nvim": { "branch": "master", "commit": "c68b3a003483cf382428a43035079f78474cd11e" },
|
|
||||||
"lualine.nvim": { "branch": "master", "commit": "0050b308552e45f7128f399886c86afefc3eb988" },
|
"lualine.nvim": { "branch": "master", "commit": "0050b308552e45f7128f399886c86afefc3eb988" },
|
||||||
"magma-nvim-goose": { "branch": "main", "commit": "94370733757d550594fe4a1d65643949d7485989" },
|
"magma-nvim-goose": { "branch": "main", "commit": "94370733757d550594fe4a1d65643949d7485989" },
|
||||||
"markdown-preview.nvim": { "branch": "master", "commit": "02cc3874738bc0f86e4b91f09b8a0ac88aef8e96" },
|
"markdown-preview.nvim": { "branch": "master", "commit": "02cc3874738bc0f86e4b91f09b8a0ac88aef8e96" },
|
||||||
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "7a97a77eee486ae152d2c559a459eda7c8aa12aa" },
|
||||||
|
"mason.nvim": { "branch": "main", "commit": "14ae1ca58440b158a0a35cf90773013caddf788a" },
|
||||||
"mini.nvim": { "branch": "main", "commit": "dc0ccf1b0499d649a6177d2a406babcfe73b97de" },
|
"mini.nvim": { "branch": "main", "commit": "dc0ccf1b0499d649a6177d2a406babcfe73b97de" },
|
||||||
"nabla.nvim": { "branch": "master", "commit": "ddbfc6e244e79db9280c535ee85c81388c5d1b46" },
|
"nabla.nvim": { "branch": "master", "commit": "ddbfc6e244e79db9280c535ee85c81388c5d1b46" },
|
||||||
"navigator.lua": { "branch": "master", "commit": "66d84151e94052f710b1dfb0d1fce2faaca6dced" },
|
"navigator.lua": { "branch": "master", "commit": "66d84151e94052f710b1dfb0d1fce2faaca6dced" },
|
||||||
|
@ -63,7 +67,6 @@
|
||||||
"vim-pandoc": { "branch": "master", "commit": "9f406d964ca70d959b7867f1b5cee3d4884d4d3c" },
|
"vim-pandoc": { "branch": "master", "commit": "9f406d964ca70d959b7867f1b5cee3d4884d4d3c" },
|
||||||
"vim-pandoc-syntax": { "branch": "master", "commit": "4268535e1d33117a680a91160d845cd3833dfe28" },
|
"vim-pandoc-syntax": { "branch": "master", "commit": "4268535e1d33117a680a91160d845cd3833dfe28" },
|
||||||
"vim-spellsync": { "branch": "master", "commit": "27e103f2d283a1f6e24cc99dbdcd624713aff277" },
|
"vim-spellsync": { "branch": "master", "commit": "27e103f2d283a1f6e24cc99dbdcd624713aff277" },
|
||||||
"vim-vsnip": { "branch": "master", "commit": "8dde8c0ef10bb1afdbb301e2bd7eb1c153dd558e" },
|
|
||||||
"which-key.nvim": { "branch": "main", "commit": "684e96c5e8477f1ee9b3f2e9a12d802fd12c5531" },
|
"which-key.nvim": { "branch": "main", "commit": "684e96c5e8477f1ee9b3f2e9a12d802fd12c5531" },
|
||||||
"zen-mode.nvim": { "branch": "main", "commit": "3c92f503823088862ca2a7809d1c7edc90fb92fa" },
|
"zen-mode.nvim": { "branch": "main", "commit": "3c92f503823088862ca2a7809d1c7edc90fb92fa" },
|
||||||
"zettelkasten.nvim": { "branch": "main", "commit": "0e77624689b470410f5355b613d45219c9350264" }
|
"zettelkasten.nvim": { "branch": "main", "commit": "0e77624689b470410f5355b613d45219c9350264" }
|
||||||
|
|
|
@ -1,95 +1,40 @@
|
||||||
|
local lsp = require("lsp-zero")
|
||||||
|
lsp.preset("recommended")
|
||||||
|
lsp.on_attach(function(client, bufnr)
|
||||||
|
require("lsp-format").on_attach(client, bufnr)
|
||||||
|
end)
|
||||||
|
lsp.nvim_workspace()
|
||||||
|
lsp.setup_nvim_cmp({
|
||||||
|
sources = {
|
||||||
|
{ name = 'path' }, { name = 'nvim_lsp', keyword_length = 2 },
|
||||||
|
{ name = 'buffer', keyword_length = 3 },
|
||||||
|
{ name = 'luasnip', keyword_length = 2 }, { name = 'tmux' },
|
||||||
|
{ name = 'otter' }, { name = 'latex_symbols' }, { name = 'vCard' },
|
||||||
|
{ name = 'nvim_lua' }, { name = 'buffer' }, { name = 'spell' }
|
||||||
|
},
|
||||||
|
documentation = {
|
||||||
|
max_height = 50,
|
||||||
|
max_width = 90,
|
||||||
|
border = 'rounded',
|
||||||
|
col_offset = 0,
|
||||||
|
side_padding = 1,
|
||||||
|
winhighlight = 'Normal:Normal,FloatBorder:Normal,CursorLine:Visual,Search:None',
|
||||||
|
zindex = 1001
|
||||||
|
}
|
||||||
|
})
|
||||||
|
lsp.setup()
|
||||||
|
vim.diagnostic.config { virtual_text = true }
|
||||||
|
|
||||||
local cmp = require 'cmp'
|
local cmp = require 'cmp'
|
||||||
local lspkind = require 'lspkind'
|
-- `/` cmdline setup.
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
vim.o.completeopt = "menu,menuone,noselect"
|
|
||||||
|
|
||||||
-- completion items
|
|
||||||
require('cmp').register_source('vCard', require('completion_vcard').setup_cmp(
|
|
||||||
'~/documents/contacts/myconts'))
|
|
||||||
vim.g.vsnip_snippet_dir = (vim.env.XDG_DATA_HOME or "~/.local/share") ..
|
|
||||||
"/nvim/snippets"
|
|
||||||
cmp.setup({
|
|
||||||
snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end },
|
|
||||||
mapping = {
|
|
||||||
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
|
|
||||||
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
|
|
||||||
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
|
|
||||||
['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
|
|
||||||
['<C-e>'] = cmp.mapping({
|
|
||||||
i = cmp.mapping.abort(),
|
|
||||||
c = cmp.mapping.close()
|
|
||||||
}),
|
|
||||||
-- Accept currently selected item. If none selected, `select` first item.
|
|
||||||
-- Set `select` to `false` to only confirm explicitly selected items.
|
|
||||||
['<CR>'] = cmp.mapping.confirm({ select = false }),
|
|
||||||
["<C-n>"] = cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_next_item()
|
|
||||||
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" }),
|
|
||||||
|
|
||||||
["<C-p>"] = cmp.mapping(function()
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_prev_item()
|
|
||||||
elseif vim.fn["vsnip#jumpable"](-1) == 1 then
|
|
||||||
feedkey("<Plug>(vsnip-jump-prev)", "")
|
|
||||||
end
|
|
||||||
end, { "i", "s" })
|
|
||||||
},
|
|
||||||
formatting = {
|
|
||||||
format = lspkind.cmp_format({
|
|
||||||
with_text = false,
|
|
||||||
menu = ({
|
|
||||||
buffer = "B",
|
|
||||||
nvim_lua = "NLua",
|
|
||||||
tmux = "τ",
|
|
||||||
vCard = "VCARD"
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = 'path' }, { name = 'nvim_lsp' }, { name = 'treesitter' },
|
|
||||||
{ name = 'tmux' }, { name = 'vsnip' }, { name = 'otter' },
|
|
||||||
{ name = 'latex_symbols' }, { name = 'vCard' }, { name = 'nvim_lua' }
|
|
||||||
}, { { name = 'buffer' }, { name = 'spell' } })
|
|
||||||
})
|
|
||||||
|
|
||||||
if vim.o.ft == 'clap_input' and vim.o.ft == 'guihua' and vim.o.ft ==
|
|
||||||
'guihua_rust' then require 'cmp'.setup.buffer { completion = { enable = false } } end
|
|
||||||
|
|
||||||
-- set up pandoc bibtex source generation
|
|
||||||
require 'cmp_pandoc'.setup()
|
|
||||||
|
|
||||||
-- Use buffer source for `/` search
|
|
||||||
cmp.setup.cmdline('/', {
|
cmp.setup.cmdline('/', {
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
sources = cmp.config.sources({ { name = 'buffer' } })
|
sources = { { name = 'buffer' } }
|
||||||
})
|
})
|
||||||
|
-- `:` cmdline setup.
|
||||||
-- Use cmdline & path source for ':' in vim
|
|
||||||
cmp.setup.cmdline(':', {
|
cmp.setup.cmdline(':', {
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
sources = cmp.config.sources({ { name = 'path' } }, { { name = 'cmdline' } })
|
sources = cmp.config.sources({ { name = 'path' } }, {
|
||||||
|
{ name = 'cmdline', option = { ignore_cmds = { 'Man', '!' } } }
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol
|
|
||||||
.make_client_capabilities())
|
|
||||||
|
|
|
@ -108,8 +108,7 @@ return {
|
||||||
'echasnovski/mini.nvim',
|
'echasnovski/mini.nvim',
|
||||||
version = '*',
|
version = '*',
|
||||||
config = function() require('plug._mini') end
|
config = function() require('plug._mini') end
|
||||||
},
|
}, {
|
||||||
{
|
|
||||||
"akinsho/nvim-toggleterm.lua", -- simpler, programmable and multiple terminal toggling for nvim
|
"akinsho/nvim-toggleterm.lua", -- simpler, programmable and multiple terminal toggling for nvim
|
||||||
config = function() require('plug._toggleterm') end,
|
config = function() require('plug._toggleterm') end,
|
||||||
event = "BufWinEnter"
|
event = "BufWinEnter"
|
||||||
|
@ -129,10 +128,7 @@ return {
|
||||||
"nvim-telescope/telescope.nvim",
|
"nvim-telescope/telescope.nvim",
|
||||||
dependencies = { "nvim-lua/popup.nvim", "nvim-lua/plenary.nvim" },
|
dependencies = { "nvim-lua/popup.nvim", "nvim-lua/plenary.nvim" },
|
||||||
config = function() require('plug._telescope') end
|
config = function() require('plug._telescope') end
|
||||||
}, -- snippeting
|
}, -- treesitter
|
||||||
{"hrsh7th/vim-vsnip", event = "InsertEnter"}, -- snippet engine
|
|
||||||
{"rafamadriz/friendly-snippets", event = "InsertEnter"}, -- many snippets
|
|
||||||
-- treesitter
|
|
||||||
{
|
{
|
||||||
'nvim-treesitter/nvim-treesitter',
|
'nvim-treesitter/nvim-treesitter',
|
||||||
build = ':TSUpdate',
|
build = ':TSUpdate',
|
||||||
|
@ -160,12 +156,25 @@ return {
|
||||||
config = function() require('spellsitter').setup() end,
|
config = function() require('spellsitter').setup() end,
|
||||||
event = "BufReadPre"
|
event = "BufReadPre"
|
||||||
}, -- lsp
|
}, -- lsp
|
||||||
{'neovim/nvim-lspconfig', event = "VeryLazy"}, -- some common language server configurations
|
|
||||||
{
|
{
|
||||||
'simrat39/symbols-outline.nvim',
|
"VonHeikemen/lsp-zero.nvim",
|
||||||
config = function() require('symbols-outline').setup() end,
|
dependencies = {
|
||||||
event = "VeryLazy"
|
"neovim/nvim-lspconfig", "williamboman/mason.nvim",
|
||||||
}, -- vista-like outline view for code
|
"williamboman/mason-lspconfig.nvim", "hrsh7th/nvim-cmp",
|
||||||
|
"hrsh7th/cmp-buffer", "hrsh7th/cmp-path",
|
||||||
|
"saadparwaiz1/cmp_luasnip", "hrsh7th/cmp-nvim-lsp",
|
||||||
|
"hrsh7th/cmp-nvim-lua", "L3MON4D3/LuaSnip",
|
||||||
|
"rafamadriz/friendly-snippets", "andersevenrud/cmp-tmux",
|
||||||
|
"hrsh7th/cmp-nvim-lsp", "kdheepak/cmp-latex-symbols",
|
||||||
|
"ray-x/cmp-treesitter", "f3fora/cmp-spell", "hrsh7th/cmp-cmdline",
|
||||||
|
"cbarrete/completion-vcard", {
|
||||||
|
'aspeddro/cmp-pandoc.nvim',
|
||||||
|
dependencies = { 'nvim-lua/plenary.nvim', 'jbyuki/nabla.nvim' },
|
||||||
|
event = "InsertEnter"
|
||||||
|
}, { "lukas-reineke/lsp-format.nvim", config = true }
|
||||||
|
},
|
||||||
|
config = function() require('plug._cmp') end
|
||||||
|
}, { 'simrat39/symbols-outline.nvim', config = true, event = "VeryLazy" }, -- vista-like outline view for code
|
||||||
{ 'ray-x/lsp_signature.nvim', event = "VeryLazy" },
|
{ 'ray-x/lsp_signature.nvim', event = "VeryLazy" },
|
||||||
{ 'ray-x/guihua.lua', build = 'cd lua/fzy && make', event = "VeryLazy" }, {
|
{ 'ray-x/guihua.lua', build = 'cd lua/fzy && make', event = "VeryLazy" }, {
|
||||||
'ray-x/navigator.lua',
|
'ray-x/navigator.lua',
|
||||||
|
@ -173,29 +182,14 @@ return {
|
||||||
event = "VeryLazy"
|
event = "VeryLazy"
|
||||||
}, -- and completion
|
}, -- and completion
|
||||||
{
|
{
|
||||||
'hrsh7th/nvim-cmp', -- simple completion engine built specifically for nvim and lsp
|
|
||||||
dependencies = {
|
|
||||||
'onsails/lspkind-nvim', 'andersevenrud/cmp-tmux', -- completion source from adjacent tmux panes
|
|
||||||
'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-path',
|
|
||||||
'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-vsnip', 'hrsh7th/cmp-nvim-lua',
|
|
||||||
'kdheepak/cmp-latex-symbols', 'ray-x/cmp-treesitter',
|
|
||||||
'f3fora/cmp-spell', 'cbarrete/completion-vcard'
|
|
||||||
},
|
|
||||||
event = "VeryLazy",
|
|
||||||
config = function() require('plug._cmp') end
|
|
||||||
}, {
|
|
||||||
'aspeddro/cmp-pandoc.nvim',
|
|
||||||
dependencies = {'nvim-lua/plenary.nvim', 'jbyuki/nabla.nvim'},
|
|
||||||
event = "VeryLazy"
|
|
||||||
}, {
|
|
||||||
"jghauser/papis.nvim",
|
"jghauser/papis.nvim",
|
||||||
after = { "telescope.nvim", "nvim-cmp" },
|
after = { "telescope.nvim", "nvim-cmp" },
|
||||||
dependencies = {
|
dependencies = {
|
||||||
"kkharji/sqlite.lua", "nvim-lua/plenary.nvim",
|
"kkharji/sqlite.lua", "nvim-lua/plenary.nvim",
|
||||||
"MunifTanjim/nui.nvim", "nvim-treesitter/nvim-treesitter"
|
"MunifTanjim/nui.nvim", "nvim-treesitter/nvim-treesitter"
|
||||||
},
|
},
|
||||||
event = "VeryLazy",
|
ft = writing_ft,
|
||||||
rocks = { "lyaml" },
|
rocks = { "lyaml" },
|
||||||
config = function() require("papis").setup({}) end
|
config = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue