" ---------------------------------------------------------------------------- " vundle essentials " ---------------------------------------------------------------------------- set nocompatible filetype off " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " let vundle manage vundle... Plugin 'VundleVim/Vundle.vim' " Basic plugins Plugin 'jiangmiao/auto-pairs' Plugin 'preservim/nerdtree' Plugin 'jeetsukumaran/vim-buffergator' " IDE like plugins Plugin 'prabirshrestha/asyncomplete.vim' Plugin 'prabirshrestha/vim-lsp' Plugin 'prabirshrestha/asyncomplete-lsp.vim' Plugin 'mattn/vim-lsp-settings' Plugin 'yami-beta/asyncomplete-omni.vim' Plugin 'prabirshrestha/asyncomplete-file.vim' " Language autocomplete for English Plugin 'htlsne/asyncomplete-look' " an additional colorscheme I like Plugin 'altercation/vim-colors-solarized' call vundle#end() filetype plugin indent on " ---------------------------------------------------------------------------- " basic essentials " ---------------------------------------------------------------------------- " don't make vim vi compatible (if not set you miss out on a lot of features!) " you'll see this option set in most configuration files found online set nocompatible " enable filetype recognition plus indent and plugin (pretty much mandatory) filetype plugin indent on " required " enable syntax highlighting syntax on " backspace can be a tricky thing and this setting make it work a lot better set backspace=indent,eol,start " when tab completing on the expert line you don't want to miss out on EDIT vs " edit or nerdtree vs NERDTree and this setting ignores case completely set ignorecase " highlight your search patterns (very handy when building regexes) set hlsearch " highlight the search pattern as-you-go (tremendously helpful when " constructing regexes) set incsearch " always show a status line at the bottom of your vim which shows some basic " information about the file, which line you're at etc set laststatus=2 " show files in statusbar when opening via expert mode set wildmenu " also show all possible expert mode commands in the statusline set wildmode=full " reverse numbering (in the sideline) so you don't have to manually count how " many lines you have to yank set rnu " it's also nice to still have your absolute line number in the sideline set nu " can do copy paste from the clipboard set clipboard=unnamedplus " automatically save buffers set autowrite set autowriteall " spaces not tabs for coding purposes set sw=4 set ts=4 set sts=4 " mouse usage can be handy, especially when using LspPeekDefinition set mouse=a " enable code folding set foldmethod=indent " set SPACE to toggle a fold nnoremap za " set the leader key for shortcuts (uncomment if you don't want it to be the " default \ key "let mapleader=";" " ---------------------------------------------------------------------------- " plugin configuration " ---------------------------------------------------------------------------- " NERDTree " -------- " map a keyboard shortcut to show and hide NERDTree nnoremap :NERDTreeToggle " Exit Vim if NERDTree is the only window remaining in the only tab. autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " vim-lsp " ------- " general vim-lsp settings " ------------------------ " maps quite q few keyboad shortcuts " this is taken staight off the github page with one added shortcut to peak at " the definition of a function or class function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif nmap gd (lsp-definition) nmap gpd (lsp-peek-definition) nmap gs (lsp-document-symbol-search) nmap gS (lsp-workspace-symbol-search) nmap gr (lsp-references) nmap gi (lsp-implementation) nmap gt (lsp-type-definition) nmap rn (lsp-rename) nmap [g (lsp-previous-diagnostic) nmap ]g (lsp-next-diagnostic) nmap K (lsp-hover) inoremap lsp#scroll(+4) inoremap lsp#scroll(-4) let g:lsp_format_sync_timeout = 2000 autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') endfunction augroup lsp_install au! " call s:on_lsp_buffer_enabled only for languages that has the server registered. autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END " asyncomplete " ------------ " make tab complete work inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? asyncomplete#close_popup() : "\" " force refresh with CTRL-SPACE imap (asyncomplete_force_refresh) " asyncomplete-file " ----------------- au User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#file#get_source_options({ \ 'name': 'file', \ 'allowlist': ['*'], \ 'priority': 10, \ 'completor': function('asyncomplete#sources#file#completor') \ })) " asyncomplete-omni " ----------------- autocmd User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#omni#get_source_options({ \ 'name': 'omni', \ 'allowlist': ['*'], \ 'blocklist': ['c', 'cpp', 'html'], \ 'completor': function('asyncomplete#sources#omni#completor'), \ 'config': { \ 'show_source_kind': 1, \ }, \ })) " asyncomplete-look " ----------------- au User asyncomplete_setup call asyncomplete#register_source({ \ 'name': 'look', \ 'allowlist': ['text', 'markdown'], \ 'completor': function('asyncomplete#sources#look#completor'), \ }) " ---------------------------------------------------------------------------- " visual configuration " ---------------------------------------------------------------------------- " set a colorscheme colorscheme solarized set background=dark " do soft wrap of text but not in the middle of words set wrap linebreak nolist " don't do hard wraps in any files set textwidth=0 " add a color column at the 80 char set colorcolumn=80 " spelling highlight needs to be done after the colorscheme load highlight SpellBad term=underline cterm=underline " enable English spellchecking in markdown files autocmd FileType markdown setlocal spell autocmd FileType markdown setlocal spelllang=en