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 }) |