" Tyler Triplett " .vimrc " tries to remain 'minimal' " e.g., `:find vim* <TAB>` set path+=** " set mouse=a " number of lines at the beginning and end of files checked for file-specific vars set modelines=0 " reload files changed outside of Vim not currently modified in Vim (needs below) set autoread " use Unicode set encoding=utf-8 " errors flash screen rather than emit beep set visualbell " make Backspace work like Delete set backspace=indent,eol,start " don't create `filename~` backups set nobackup " don't create temp files set noswapfile " line numbers and distances " set relativenumber set number " number of lines offset when jumping set scrolloff=2 " To enter a TAB character when `expandtab` is in effect, " CTRL-v-TAB set expandtab tabstop=4 shiftwidth=4 softtabstop=4 " Indent new line the same as the preceding line set autoindent " make scrolling and painting fast " ttyfast kept for vim compatibility but not needed for nvim set ttyfast lazyredraw " highlight matching parens, braces, brackets, etc set showmatch " http://vim.wikia.com/wiki/Searching set hlsearch incsearch ignorecase smartcase " As opposed to `wrap` set nowrap " http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file set autochdir " open new buffers without saving current modifications (buffer remains open) set hidden " http://stackoverflow.com/questions/9511253/how-to-effectively-use-vim-wildmenu set wildmenu wildmode=list:longest,full " Use system clipboard " http://vim.wikia.com/wiki/Accessing_the_system_clipboard " for linux set clipboard=unnamedplus set nofoldenable set nocompatible syntax enable set termguicolors set colorcolumn=80 " statusline indicates insert or normal mode set showmode showcmd " tt file == cpp files " autocmd BufRead,BufNewFile *.tpp set filetype=cpp autocmd BufRead,BufNewFile *.tt set filetype=cpp set laststatus=1 call plug#begin('~/.vim/plugged') "" Syntax " https://github.com/bfrg/vim-cpp-modern " Plug 'bfrg/vim-cpp-modern' " https://github.com/clojure-vim/clojure.vim Plug 'clojure-vim/clojure.vim' "" Color Schemes " https://github.com/wadackel/vim-dogrun Plug 'wadackel/vim-dogrun' " https://github.com/bluz71/vim-moonfly-colors Plug 'bluz71/vim-moonfly-colors' " https://github.com/arcticicestudio/nord-vim " Plug 'arcticicestudio/nord-vim' " https://github.com/danishprakash/vim-yami Plug 'danishprakash/vim-yami' "" Util " https://github.com/preservim/nerdtree Plug 'preservim/nerdtree' " https://github.com/tpope/vim-commentary Plug 'tpope/vim-commentary' " " https://github.com/tpope/vim-fireplace " Plug 'tpope/vim-fireplace' " https://github.com/t-trpl/dumbtree.vim Plug 't-trpl/fastswap.vim' " https://github.com/neoclide/coc.nvim Plug 'neoclide/coc.nvim', {'branch': 'release'} "" call plug#end() nnoremap <F3> :call FastSwap()<CR> " colorscheme dogrun colorscheme moonfly """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " NERDTREE """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Close the tab if NERDTree is the only window remaining in it. " autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif map <F2> :NERDTreeToggle<cr> map <C-l> :tabn<CR> map <C-h> :tabp<CR> map <C-n> :tabnew<CR> " nmap <tab> <C-W>W nmap <S-tab> <C-W>w """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " CPP-MODERN """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Disable function highlighting (affects both C and C++ files) " let g:cpp_function_highlight = 1 " Enable highlighting of C++11 attributes " let g:cpp_attributes_highlight = 1 " Highlight struct/class member variables (affects both C and C++ files) " let g:cpp_member_highlight = 1 " Put all standard C and C++ keywords under Vim's highlight group 'Statement' " (affects both C and C++ files) " let g:cpp_simple_highlight = 1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " CLOJURE-VIM """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Always show the signcolumn, otherwise it would shift the text each time filetype plugin indent on let g:clojure_syntax_keywords = { \ 'clojureMacro': ["defproject", "defcustom"], \ 'clojureFunc': ["string/join", "string/replace"] \ } let g:clojure_align_subforms = 1 let g:clojure_align_multiline_strings = 1 let g:clojure_special_indent_words = 'deftype,defrecord,reify,proxy,' . \ 'extend-type,extend-protocol,letfn' let g:clojure_fuzzy_indent = 1 let g:clojure_fuzzy_indent_patterns = 1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " COC-NVIM """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved. if has("nvim-0.5.0") || has("patch-8.1.1564") " Recently vim can merge signcolumn and number column into one set signcolumn=number else set signcolumn=yes endif " Use tab for trigger completion with characters ahead and navigate. " NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by " other plugin before putting this into your config. " BROKEN // " inoremap <silent><expr> <TAB> " \ pumvisible() ? "\<C-n>" : " \ <SID>check_back_space() ? "\<TAB>" : " \ coc#refresh() " // " Possibly not needed inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" inoremap <silent><expr> <tab> coc#pum#visible() ? coc#pum#confirm() : "\<tab>" " function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use <c-space> to trigger completion. if has('nvim') inoremap <silent><expr> <c-space> coc#refresh() else inoremap <silent><expr> <c-@> coc#refresh() endif " Make <CR> auto-select the first completion item and notify coc.nvim to " format on enter, <cr> could be remapped by other vim plugin " BROKEN // "inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" inoremap <expr> <cr> coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" " Use `[g` and `]g` to navigate diagnostics " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. nmap <silent> [g <Plug>(coc-diagnostic-prev) nmap <silent> ]g <Plug>(coc-diagnostic-next) " GoTo code navigation. nmap <silent> gd <Plug>(coc-definition) nmap <silent> gy <Plug>(coc-type-definition) nmap <silent> gi <Plug>(coc-implementation) nmap <silent> gr <Plug>(coc-references) " Use K to show documentation in preview window. nnoremap <silent> K :call <SID>show_documentation()<CR> function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('<cword>') elseif (coc#rpc#ready()) call CocActionAsync('doHover') else execute '!' . &keywordprg . " " . expand('<cword>') endif endfunction " Highlight the symbol and its references when holding the cursor. autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming. nmap <leader>rn <Plug>(coc-rename) " Formatting selected code. xmap <leader>f <Plug>(coc-format-selected) nmap <leader>f <Plug>(coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s). autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder. autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Applying codeAction to the selected region. " Example: `<leader>aap` for current paragraph xmap <leader>a <Plug>(coc-codeaction-selected) nmap <leader>a <Plug>(coc-codeaction-selected) " Remap keys for applying codeAction to the current buffer. nmap <leader>ac <Plug>(coc-codeaction) " Apply AutoFix to problem on the current line. nmap <leader>qf <Plug>(coc-fix-current) " Run the Code Lens action on the current line. nmap <leader>cl <Plug>(coc-codelens-action) " Map function and class text objects " NOTE: Requires 'textDocument.documentSymbol' support from the language server. xmap if <Plug>(coc-funcobj-i) omap if <Plug>(coc-funcobj-i) xmap af <Plug>(coc-funcobj-a) omap af <Plug>(coc-funcobj-a) xmap ic <Plug>(coc-classobj-i) omap ic <Plug>(coc-classobj-i) xmap ac <Plug>(coc-classobj-a) omap ac <Plug>(coc-classobj-a) " Remap <C-f> and <C-b> for scroll float windows/popups. if has('nvim-0.4.0') || has('patch-8.2.0750') nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>" inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>" vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" endif " Use CTRL-S for selections ranges. " Requires 'textDocument/selectionRange' support of language server. nmap <silent> <C-s> <Plug>(coc-range-select) xmap <silent> <C-s> <Plug>(coc-range-select) " Add `:Format` command to format current buffer. command! -nargs=0 Format :call CocActionAsync('format') " Add `:Fold` command to fold current buffer. command! -nargs=? Fold :call CocAction('fold', <f-args>) " Add `:OR` command for organize imports of the current buffer. command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') " Add (Neo)Vim's native statusline support. " NOTE: Please see `:h coc-status` for integrations with external plugins that " provide custom statusline: lightline.vim, vim-airline. set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} " Mappings for CoCList " Show all diagnostics. nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr> " Manage extensions. nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr> " Show commands. nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr> " Find symbol of current document. nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr> " Search workspace symbols. nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr> " Do default action for next item. nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR> " Do default action for previous item. nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR> " Resume latest coc list. nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>