" cmp-nvim-lsp, nvim-cmp, nvim-lspconfig if has('nvim') packadd cmp-nvim-lsp packadd cmp-vsnip packadd nvim-cmp packadd nvim-lspconfig packadd vim-vsnip 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 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', 'lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) end -- Add additional capabilities supported by nvim-cmp local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities, {snippetSupport = false}) -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local nvim_lsp = require('lspconfig') for _, lsp in ipairs({'jedi_language_server', 'gopls', 'rust_analyzer', 'clangd', 'ccls', 'tsserver'}) do nvim_lsp[lsp].setup({ on_attach = on_attach, capabilities = capabilities }) end -- nvim-cmp setup local cmp = require('cmp') cmp.setup { mapping = { [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.confirm({select = true}), }, sources = { {name = 'nvim_lsp'}, {name = 'vsnip'}, }, snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end, }, } -- Set completeopt to have a better completion experience vim.o.completeopt = 'menuone,noselect' EOF endif " fzf if executable('fzf') packadd fzf.vim packadd fzf let $FZF_DEFAULT_COMMAND='ag --hidden --ignore .git -f -g "" 2> /dev/null' let g:fzf_colors = { \ 'bg': ['bg', 'Normal'], \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], \ 'border': ['fg', 'Ignore'], \ 'fg': ['fg', 'Normal'], \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], \ 'header': ['fg', 'Comment'], \ 'hl': ['fg', 'Comment'], \ 'hl+': ['fg', 'Statement'], \ 'info': ['fg', 'PreProc'], \ 'marker': ['fg', 'Keyword'], \ 'pointer': ['fg', 'Exception'], \ 'prompt': ['fg', 'Conditional'], \ 'spinner': ['fg', 'Label'], \ } if has('windows') let g:fzf_preview_window = '' endif nnoremap fg :GFiles nnoremap ff :Files ~ nnoremap fh :History nnoremap fc :BCommits nnoremap fb :Buffers nnoremap fl :Lines endif " vim-airline let g:airline#extensions#tabline#enabled = 1 let g:airline_symbols_ascii = 1 " vim-argwrap nnoremap a :ArgWrap " vim-better-whitespace highlight ExtraWhitespace ctermbg=DarkMagenta guibg=#6c71c4 " vim-dirvish let g:dirvish_mode = ':sort ,^.*[\/],' " vim-easy-align let g:easy_align_ignore_groups = [] nmap ga (EasyAlign) vmap (EasyAlign) " vim-go let g:go_fmt_command = 'goimports' let g:go_null_module_warning = 0 let g:go_version_warning = 0 " vim-header let g:header_auto_add_header = 0 let g:header_field_author = 'Alex Yatskov' let g:header_field_author_email = 'alex@foosoft.net' let g:header_field_filename = 0 " vim-interestingwords let g:interestingWordsGUIColors = ['#8ccbea', '#a4e57e', '#ffdb72', '#ff7272', '#ffb3ff', '#9999ff'] let g:interestingWordsTermColors = ['154', '121', '211', '137', '214', '222']