Minimal LSP Autocomplete In Vim / NeoVIm
Requires junegunn/vim-plug
Minimal LSP Autocomplete In Vim / NeoVIm
Requires junegunn/vim-plug
"------------------------------------------------------------------- " | |
" Plugins: | |
"------------------------------------------------------------------- " | |
call plug#begin('~/.config/nvim/plugged') | |
Plug 'neovim/nvim-lspconfig' | |
Plug 'anott03/nvim-lspinstall' | |
Plug 'hrsh7th/nvim-compe' | |
call plug#end() | |
"------------------------------------------------------------------- " | |
" LSP: | |
"------------------------------------------------------------------- " | |
lua << EOF | |
-- Use an on_attach function to only map the following keys | |
-- after the language server attaches to the current buffer | |
local on_attach = function(client, bufnr) | |
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end | |
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end | |
-- Enable completion triggered by <c-x><c-o> | |
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') | |
-- Mappings | |
local opts = { noremap=true, silent=true } | |
-- See `:help vim.lsp.*` for documentation on any of the below functions | |
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts) | |
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts) | |
buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts) | |
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) | |
buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) | |
buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) | |
buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) | |
buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) | |
buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) | |
buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) | |
buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) | |
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) | |
buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts) | |
buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts) | |
buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts) | |
buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts) | |
buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts) | |
end | |
-- Use a loop to conveniently call 'setup' on multiple servers and | |
-- map buffer local keybindings when the language server attaches | |
local servers = { "gopls", "tsserver" } | |
for _, lsp in ipairs(servers) do | |
require'lspconfig'[lsp].setup { | |
on_attach = on_attach, | |
flags = { | |
debounce_text_changes = 150, | |
} | |
} | |
end | |
EOF | |
"------------------------------------------------------------------- " | |
" COMPE (autocomplete): | |
"------------------------------------------------------------------- " | |
lua << EOF | |
-- Set up Compe | |
require'compe'.setup { | |
enabled = true; | |
autocomplete = true; | |
debug = true; | |
min_length = 1; | |
preselect = 'enable'; | |
throttle_time = 80; | |
source_timeout = 200; | |
incomplete_delay = 400; | |
max_abbr_width = 100; | |
max_kind_width = 100; | |
max_menu_width = 100; | |
documentation = true; | |
source = { | |
path = true; | |
buffer = true; | |
calc = true; | |
vsnip = true; | |
nvim_lsp = true; | |
nvim_lua = true; | |
spell = true; | |
tags = true; | |
snippets_nvim = true; | |
treesitter = true; | |
}; | |
} | |
EOF | |
" Compe Mappings | |
inoremap <silent><expr> <C-Space> compe#complete() | |
inoremap <silent><expr> <CR> compe#confirm('<CR>') | |
inoremap <silent><expr> <C-e> compe#close('<C-e>') | |
inoremap <silent><expr> <C-f> compe#scroll({ 'delta': +4 }) | |
inoremap <silent><expr> <C-d> compe#scroll({ 'delta': -4 }) |