59 lines
1.6 KiB
Lua
59 lines
1.6 KiB
Lua
local map = vim.keymap.set
|
|
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 lsp = require('lspconfig')
|
|
local cmp = require('cmp')
|
|
|
|
cmp.setup({
|
|
preselect = cmp.PreselectMode.None,
|
|
mapping = {
|
|
['<Tab>'] = function(fallback)
|
|
if cmp.visible() then
|
|
cmp.select_next_item()
|
|
elseif has_words_before() then
|
|
cmp.complete()
|
|
else
|
|
fallback()
|
|
end
|
|
end,
|
|
["<S-Tab>"] = function(fallback)
|
|
if cmp.visible() then
|
|
cmp.select_prev_item()
|
|
else
|
|
fallback()
|
|
end
|
|
end,
|
|
['<C-d>'] = cmp.mapping.scroll_docs(-4),
|
|
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
},
|
|
sources = {
|
|
{name = 'nvim_lsp', max_item_count = 10},
|
|
{name = 'buffer', max_item_count = 10},
|
|
{name = 'path', priority = 1}
|
|
},
|
|
})
|
|
|
|
local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities())
|
|
|
|
local on_attach = function(client, bufnr)
|
|
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
|
local bufopts = { noremap=true, silent=true, buffer=bufnr }
|
|
map('n', 'gD', vim.lsp.buf.declaration, bufopts)
|
|
map('n', 'gd', vim.lsp.buf.definition, bufopts)
|
|
map('n', 'F', vim.lsp.buf.hover, bufopts)
|
|
map('n', 'gr', vim.lsp.buf.references, bufopts)
|
|
map('n', 'gi', vim.lsp.buf.implementation, bufopts)
|
|
map('n', 'gS', vim.lsp.buf.signature_help, bufopts)
|
|
map('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
|
|
map('n', '<space>cw', vim.lsp.buf.rename, bufopts)
|
|
end
|
|
|
|
lsp['gopls'].setup{
|
|
cmd = {'gopls'},
|
|
on_attach = on_attach,
|
|
capabilities = capabilities
|
|
}
|