" wreed vimrc " vim:foldmethod=marker:foldlevel=0: "enable python python << end import vim end "{{{ ***** PLUGINS INSTALLATION ***** " " ##### vim-plug ##### set nocompatible call plug#begin('~/.vim/bundle') " ***** plugins that require more stuff (compilation) " As-you-type semantic completion. Plug 'Valloric/YouCompleteMe', { 'frozen': 1, 'for': ['cpp', 'c', 'java', 'python', 'sh'], 'on': ['YcmCompleter', 'YcmDiags', 'YcmForceCompileAndDiagnostics']} autocmd! User YouCompleteMe call youcompleteme#Enable() " ***** simple plugins " can launch an interactive program within an Vim buffer (like bash or other shells) Plug 'oplatek/Conque-Shell', { 'on': ['ConqueTerm', 'ConqueTermSplit', 'ConqueTermVSplit']} " easy buffer management. Replaced by Unite "Plugin 'jlanzarotta/bufexplorer' " supposedly make '%' more powerful Plug 'tmhedberg/matchit' " Comments " Provides awesome commenting shortcuts " Plug 'scrooloose/nerdcommenter' " Way more lightweight comment plugin Plug 'tpope/vim-commentary' " Comment text objects (depends on the following Plug 'glts/vim-textobj-comment' " define you're own text objects!! Plug 'kana/vim-textobj-user' " Shows file browser. (replaces netrw and :Explore) Plug 'scrooloose/nerdtree', { 'on': ['NERDTreeToggle', 'NERDTreeFind']} " show tabs up on top prettily Plug 'mkitt/tabline.vim' " shows an outline of all Tags in a file Plug 'majutsushi/tagbar' " Snippet completion Plug 'SirVer/ultisnips' ", { 'on': []} " Make vim priiiiity Plug 'bling/vim-airline' " Asynchonous building and launching of programs Plug 'tpope/vim-dispatch' " Makes motions way better. lets you jump anywhere on the screen " Plug 'Lokaltog/vim-easymotion' Plug 'justinmk/vim-sneak' " Allows multiple cursors at once. very useful Plug 'wreed4/vim-multiple-cursors' " Dependency for vim-snippets Plug 'tomtom/tlib_vim' " A library of snippets that work with Utilsnip Plug 'honza/vim-snippets' " ability to surround text objects with things like quotes or parens Plug 'tpope/vim-surround' " Amazing plugin that makes a lot of things obsolete... Plug 'unite.vim' " Make Tmux pretty Plug 'edkolev/tmuxline.vim' " switch between header files easily Plug 'a.vim' " pretty JSON stuff Plug 'elzr/vim-json' " Diff directories quickly and powerfully Plug 'DirDiff.vim' " Enable nested vimrc files Plug 'wreed4/vim-lvimrc' " Gives a graphical view of vim's undo tree (replaced by neovim-compatible " fork) "Plugin 'sjl/gundo.vim' Plug 'simnalamburt/vim-mundo' " Plug 'mbbill/undotree' " Git integration Plug 'tpope/vim-fugitive' " Matching things in insert mode Plug 'Raimondi/delimitMate' " Easy alignment Plug 'junegunn/vim-easy-align' " Semantic highlighting Plug 'jaxbot/semantic-highlight.vim' " Additional highlighting for cpp Plug 'octol/vim-cpp-enhanced-highlight' " Fancy start screen Plug 'mhinz/vim-startify' " Better text objects Plug 'wellle/targets.vim' " Diff individual sections of code Plug 'AndrewRadev/linediff.vim' " Pull in code from the internet Plug 'kasandell/Code-Pull' "COLORSCHEMES " about 3 billion colorschemes " Plug 'flazz/vim-colorschemes' Plug 'altercation/vim-colors-solarized' Plug 'morhetz/gruvbox' Plug 'NLKNguyen/papercolor-theme' Plug 'freeo/vim-kalisi' "Machine-specific plugins Plug 'gisraptor/vim-lilypond-integrator', {'frozen': 1, 'for': ['lilypond']} " end installed plugins call plug#end() " augroup load_us_ycm " autocmd! " autocmd! InsertEnter * call plug#load('ultisnips', 'YouCompleteMe') " \| call youcompleteme#Enable() | autocmd! load_us_ycm " augroup END " #####Pathogen##### " call pathogen#infect() " call pathogen#helptags() " }}} "{{{ ***** PLUGIN SETTINGS ***** " " {{{##### PyMode ##### "let pymode_lint_ignore="E501,E401,E225,W191,W391,W404" " use rope code assist instead of a complete function " au FileType python inoremap '=RopeCodeAssistInsertMode()=pumvisible() ? "\C-p>\Down>" : ""' " }}} " {{{##### Tlist ##### " Toggle tag list "nnoremap :TlistToggle "}}} " {{{##### EasyMotion ##### " nmap s (easymotion-sn) " }}} " {{{##### Vim-Sneak ##### nmap s Sneak_s xmap s Sneak_s omap s Sneak_s nmap S Sneak_S xmap S Sneak_S omap S Sneak_S " this seems weird, but it's to maintain motor memory with EasyMotion nmap w (SneakStreak) nmap W (SneakStreakBackward) "}}} " {{{##### Tagbar ##### let g:tagbar_autofocus = 1 let g:tagbar_left = 1 let g:tagbar_zoomwidth = 0 let g:tagbar_show_linenumbers = -1 let g:tagbar_foldlevel = 0 let g:tagbar_autoshowtag = 1 let g:tagbar_sort = 0 " open Tagbar automatically when viewing a supported file/files "autocmd VimEnter * nested :call tagbar#autoopen(1) " open Tagbar automatically when entering a buffer of supported file/files "autocmd BufEnter * nested :call tagbar#autoopen(0) " Toggle Tagbar nnoremap tt :TagbarToggle "}}} " {{{##### Airline ##### let g:airline_powerline_fonts=1 " only if YCM is enabled " autocmd User YouCompleteMe let g:airline#extensions#ycm#enabled = 1 | AirlineRefresh let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#show_tab_nr = 1 let g:airline#extensions#tabline#tab_nr_type = 1 let g:airline#extensions#tabline#show_close_button =1 let g:airline#extensions#tagbar#flags = 'f' let g:airline#extensions#tagbar#enabled = 1 let g:airline#extensions#whitespace#enabled = 0 let g:airline#extensions#tmuxline#enabled = 1 let g:airline#extensions#tabline#buffer_idx_mode = 1 nmap 1 AirlineSelectTab1 nmap 2 AirlineSelectTab2 nmap 3 AirlineSelectTab3 nmap 4 AirlineSelectTab4 nmap 5 AirlineSelectTab5 nmap 6 AirlineSelectTab6 nmap 7 AirlineSelectTab7 nmap 8 AirlineSelectTab8 nmap 9 AirlineSelectTab9 " }}} " {{{##### NERDTree ##### let g:NERDTreeHijackNetrw = 1 let g:NERDTreeDirArrows = 1 let g:NERDTreeWinPos = "right" let g:NERDTreeMouseMode = 2 let g:NERDTreeShowLineNumbers = 1 let g:NERDTreeIgnore=['\~$', '\.vim$', '\.d$', '\.sw.$'] nnoremap nt :NERDTreeToggle nnoremap nf :NERDTreeFind " }}} " {{{##### NerdCommenter ##### imap NERDCommenterInsert let g:NERDSpaceDelims = 1 " }}} " {{{##### UltiSnips ##### let g:UltiSnipsEditSplit = "vertical" let g:UltiSnipsExpandTrigger = "" let g:UltiSnipsJumpForwardTrigger="" let g:UltiSnipsJumpBackwardTrigger="" let g:UltiSnipsSnippetsDir="~/.vim/UltiSnips" " }}} " {{{##### CCTree ##### nnoremap ct :CCTreeWindowToggle " }}} " {{{##### ConqueTerm ##### let g:ConqueTerm_CloseOnEnd = 1 "Conque spits out an error about CursorHoldI making it run slow. repress "these warnings let g:ConqueTerm_StartMessages = 0 let g:ConqueTerm_ReadUnfocused = 1 let g:ConqueTerm_ToggleKey = '' " }}} " {{{##### Pyclewn ##### " Only map keys if we're in Pyclewn if has("netbeans_enabled") "nmap :exe ":Cprint " . expand("") nmap "pyiw :Cprint p nmap :exe ":Cdbgvar " . expand("") vmap "py :Cprint p endif " }}} " {{{##### YouCompleteMe ##### " Do not open preview window when completing set completeopt=menuone let g:ycm_add_preview_to_completeopt = 0 " Auto Close preview window let g:ycm_autoclose_preview_window_after_insertion = 1 " Disable Tab for cycling through commands so that UtilSnips will still work let g:ycm_key_list_select_completion=[''] let g:ycm_key_list_previous_completion=[''] let g:ycm_collect_identifiers_from_tags_files=0 let g:ycm_collect_identifiers_from_comments_and_strings = 0 let g:ycm_complete_in_comments = 1 let g:ycm_key_invoke_completion = '' "let g:ycm_extra_conf_globlist = ['~/.ycm_extra_conf.py'] let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' let g:ycm_use_ultisnips_completer = 1 let g:ycm_filetype_blacklist = { \ 'tagbar' : 1, \ 'nerdtree': 1, \ 'qf' : 1, \ 'notes' : 1, \ 'markdown' : 1, \ 'unite' : 1, \ 'vimwiki' : 1, \ 'pandoc' : 1, \ 'infolog' : 1, \ 'mail' : 1 \} " Mappings nnoremap ] :YcmCompleter GoTo nnoremap [ :YcmCompleter GoToReferences nnoremap gt :YcmCompleter GetType nnoremap gp :YcmCompleter GetParent nnoremap gd :YcmCompleter GetDoc nnoremap = :YcmCompleter FixIt nnoremap :YcmDiags nnoremap :YcmForceCompileAndDiagnostics " }}} " {{{##### Multiple Cursors ##### let g:multi_cursor_exit_from_insert_mode = 0 " }}} " {{{##### Unite ##### let g:unite_source_history_yank_enable = 1 call unite#filters#matcher_default#use(['matcher_fuzzy']) "nnoremap t :Unite -buffer-name=files -start-insert file_rec/async:! nnoremap e :Unite -buffer-name=files -toggle file nnoremap r :Unite -buffer-name=mru -start-insert file_mru nnoremap y :Unite -buffer-name=yank history/yank nnoremap j :Unite -buffer-name=jump jump nnoremap be :Unite -buffer-name=buffer buffer nnoremap / :Unite -keep-focus -no-quit -buffer-name=search vimgrep:% " "Doesn't work. Can't get plugins to play nice "nnoremap t :Unite -buffer-name=outline -start-insert outline " }}} " {{{##### JSON.vim ##### augroup json_autocmd autocmd! autocmd FileType json set autoindent autocmd FileType json set formatoptions=tcq2l autocmd FileType json set textwidth=78 shiftwidth=2 autocmd FileType json set softtabstop=2 tabstop=8 autocmd FileType json set expandtab autocmd FileType json set foldmethod=indent augroup END " }}} " {{{##### DirDiff ##### let g:DirDiffExcludes = ".*.*.swp,*.d" " }}} " {{{##### Mundo ##### nnoremap u :MundoToggle let g:mundo_playback_delay = 300 let g:mundo_preview_bottom = 1 " }}} " {{{##### UndoTree ##### " nnoremap u :UndotreeToggle " let g:undotree_WindowLayout = 2 " let g:undotree_SetFocusWhenToggle = 1 " }}} " {{{##### EasyAlign ##### vmap (LiveEasyAlign) " }}} " {{{##### DelimitMate ##### let delimitMate_expand_space = 1 let delimitMate_expand_cr = 1 imap delimitMateS-Tab " }}} " {{{##### Semantic-Highlight.vim ##### let g:semanticBlacklistOverride = { \'cpp': [ \ 'auto', 'const', 'double', 'float', 'int', 'short', \ 'struct', 'unsigned', 'break', 'continue', 'else', 'for', \ 'long', 'signed', 'switch', 'void', 'case', 'default', \ 'enum', 'goto', 'register', 'sizeof', 'typedef', 'volatile', \ 'char', 'do', 'extern', 'if', 'return', 'static', \ 'union', 'while', 'asm', 'dynamic_cast', 'namespace', 'reinterpret_cast', \ 'try', 'bool', 'explicit', 'new', 'static_cast', 'typeid', \ 'catch', 'false', 'operator', 'template', 'typename', 'class', \ 'friend', 'private', 'this', 'using', 'const_cast', 'inline', \ 'public', 'throw', 'virtual', 'delete', 'mutable', 'protected', \ 'true', 'wchar_t', 'assert' \ ] \ } " }}} " {{{##### vim-cpp-enhanced-highlight ##### let g:cpp_class_scope_highlight=0 let g:cpp_experimental_template_highlight = 0 " }}} " {{{##### Startify ##### let g:startify_list_order = [ \ [' MRU files in current directory [ ' . tlib#string#Strip(system('pwd')) . ' ]'], 'dir', \ [' MRU files'], 'files', \ [' Sessions'], 'sessions', \ [' Bookmarks'], 'bookmarks'] let g:starify_bookmarks = [ '~/.vim/vimrc' ] let g:startify_session_delete_buffers = 1 let g:startify_custom_header = \ map(split(system('cowsay -f dragon Welcome to VIM'), '\n'), '" ". v:val') + ['',''] " \ map(split(system('toilet Welcome to VIM -t -W -F border'), '\n'), '" ". v:val') + ['',''] " \ map(split(system('fortune | cowsay'), '\n'), '" ". v:val') + ['',''] " }}} " }}} "{{{ ***** VIM FEATURES ***** " " allow project-specific .vimrc files "set exrc set secure " allow the use of a modeline set modeline " automatically read a file if it changes outside of vim set autoread " hide buffers by default instead of unloading them set hidden " turn ruler on set ruler " set incremental search set hlsearch set incsearch " set status line always on set laststatus=2 " turn vim's mode printing off. Airline takes care of this set noshowmode " shorten the pause after leaving insert mode set ttimeoutlen=50 " set mouse always on. I like the mouse sometimes set mouse=a " 256 stuff " disable BackgroundColorErase (BCE) inside of 256-color tmux sessions if &term =~ '256color' set t_ut= endif " OR... do this shit instead if &term =~ '^screen' " tmux will send xterm-style keys when xterm-keys is on execute "set =\e[1;*A" execute "set =\e[1;*B" execute "set =\e[1;*C" execute "set =\e[1;*D" endif " set utf8 if !has('nvim') set encoding=utf-8 endif set fileencoding=utf-8 " New Splits default to right, or below set splitbelow set splitright set diffopt+=vertical,iwhite "turn omnicomplete on set omnifunc=syntaxcomplete#Complete " enable persistant undo history set undofile set undodir=~/.vim/undodir " format options set expandtab set shiftwidth=4 set softtabstop=4 set autoindent set nosmartindent set cindent set cino=t0,(0, set breakindent set showbreak=↳ set breakindentopt=min:20 " TOhtml settings let g:html_ignore_conceal=1 let g:html_dynamic_folds=1 " folding options set foldlevelstart=99 set foldmethod=syntax augroup folding_settings autocmd FileType python set foldmethod=indent augroup END set wildmode=longest:full " }}} "{{{ ***** VISUALS ***** " set number set norelativenumber syntax on " Solarized settings "let g:solarized_termcolors=256 "set background=light "set background=dark "colorscheme solarized " seoul256 settings " let g:seoul256_background = 235 " colorscheme seoul256 " let g:airline_theme="tomorrow" " Gruvbox settings " let g:gruvbox_italic=0 " set background=dark " set background=light " colorscheme gruvbox " Paper-color settings " colorscheme PaperColor-Dark " let g:airline_theme="hybrid" " colorscheme bubblegum " set background=dark colorscheme kalisi set background=dark " colorscheme wombat256 " colorscheme zenburn " colorscheme kolor " colorscheme jellybeans " colorscheme hybrid " colorscheme devbox-dark-256 " colorscheme Tomorrow-Night-Eighties " colorscheme Tomorrow-Night "colorscheme carvedwoodcool set showcmd "}}} "{{{ ***** KEY MAPPINGS ***** " " make work the same in tmux and not nnoremap " easier buffer navigation " nnoremap bn :bn " nnoremap bp :bp " make backspace work set backspace=eol,start,indent set whichwrap+=<,>,h,l set whichwrap+=<,>,h,l nnoremap :so ~/.vim/vimrc:LvimrcReload nnoremap :redraw! set pastetoggle= nmap :mks! " treat wrapped lines as multiple lines when navigating map j gj map k gk " Scroll the window more intuitively nnoremap nnoremap nnoremap 10zh nnoremap 10zl nnoremap j nnoremap k nnoremap h 10zh nnoremap l 10zl vnoremap vnoremap vnoremap 10zh vnoremap 10zl vnoremap j vnoremap k vnoremap h 10zh vnoremap l 10zl " Open a new line and exit insert mode, staying on the same line nnoremap o o nnoremap O O " Clean a line and exit insert mode nnoremap c cc " Exit insert mode and put ';' at the end of the line inoremap ; A; " Open tag in new tab nnoremap T " Toggle TODOs as done or not nnoremap x :s/\[ \]TODO/[X]TODO/:nohl nnoremap :s/\[X\]TODO/[ ]TODO/:nohl " copy 'filename:linenumber' to @f register. useful for adding links to " places in files in comments nnoremap gf :let @f=@% . ':' . line('.'):echo @f " WINDOW ORGANISATION " Smart way to move between windows map j map k map h map l map k map j map h map l " easy resize windows nnoremap + nnoremap - nnoremap 3< nnoremap 3> " easy move windows nnoremap nnoremap nnoremap nnoremap " close annoying windows easily nnoremap cq :cclose nnoremap cl :lclose nnoremap cp :pclose " Call CopyMode vnoremap :call CopyMode() " Visual mode pressing * or # searches for the current selection " Super useful! From an idea by Michael Naumann vnoremap * :call VisualSelection('f') vnoremap # :call VisualSelection('b') " Default building options autocmd FileType lilypond setlocal makeprg=lilypond autocmd FileType python setlocal makeprg=mypy nnoremap :Make % " }}} "{{{ ***** COMMANDS ***** " " make todo list command! -nargs=* -complete=file Todos execute "Unite -keep-focus -auto-resize -no-quit -buffer-name=Todos vimgrep:*:TODO(" . expand("$USER") . ")" "Wrapper for make sequence "replaced by vim-dispatch plugin command! -nargs=* MyMake execute '!clear' | make! | cw " Edit ~/.vim/vimrc in a new tab command! -nargs=0 EditVimrc tabedit ~/.vim/vimrc " Swap two lines command! -nargs=1 -range Swap call Swap(, ) function! Swap(l1, l2) let cursor = line(".") echo a:l1 . " " . a:l2 if a:l1 <= a:l2 let l:source = a:l1 let l:dest = a:l2 else let l:dest = a:l1 let l:source = a:l2 endif execute l:source . "move " . l:dest execute eval(l:dest - 1) . "move " . eval(l:source - 1) execute l:source . "normal ==" execute l:dest . "normal ==" execute "normal " . cursor . "G" endfunction function! CopyMode() range execute a:firstline . "," . a:lastline . "yank c" tabnew setlocal nonumber setlocal norelativenumber setlocal showbreak= map :bd! normal [p endfunction " Diff original file (from help) command! DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ \ | diffthis | wincmd p | diffthis " from https://amix.dk/vim/vimrc.html function! VisualSelection(direction) range let l:saved_reg = @" execute "normal! vgvy" let l:pattern = escape(@", '\\/.*$^~[]') let l:pattern = substitute(l:pattern, "\n$", "", "") if a:direction == 'b' execute "normal ?" . l:pattern . "^M" " elseif a:direction == 'gv' " call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.') " elseif a:direction == 'replace' " call CmdLine("%s" . '/'. l:pattern . '/') elseif a:direction == 'f' execute "normal /" . l:pattern . "^M" endif let @/ = l:pattern let @" = l:saved_reg endfunction " }}}