let mapleader = "," set nocompatible " be iMproved, required filetype off " required let vundle_dir="~/.vim/bundle/Vundle.vim" if filereadable(expand(vundle_dir) . "/README.md") " set the runtime path to include Vundle and initialize let &rtp .= "," . vundle_dir call vundle#begin() Plugin 'VundleVim/Vundle.vim' " let Vundle manage Vundle, required Plugin 'scrooloose/nerdtree' Plugin 'c.vim' Plugin 'jeetsukumaran/vim-buffergator' Plugin 'ericcurtin/CurtineIncSw.vim' Plugin 'tpope/vim-fugitive' Plugin 'tpope/vim-surround' Plugin 'ctrlpvim/ctrlp.vim' Plugin 'rhysd/vim-clang-format' " Plugin 'shougo/neocomplete' Plugin 'godlygeek/tabular' Plugin 'airblade/vim-gitgutter' Plugin 'jeetsukumaran/vim-pythonsense' Plugin 'easymotion/vim-easymotion' Plugin 'cpiger/NeoDebug' Plugin 'ivan-krukov/vim-snakemake' Plugin 'nvie/vim-flake8' call vundle#end() " required else let vundle_repo="https://github.com/VundleVim/Vundle.vim.git" echo "Vundle not installed, type :CloneVundle to clone the vundle repo and install it" command CloneVundle execute "!git clone " . vundle_repo . " " . vundle_dir endif if !exists("vimrc_autocmds_loaded") let vimrc_autocmds_loaded = 1 " Set the filetype based on the file's extension, but only if " 'filetype' has not already been set au BufRead,BufNewFile .i3initrc setfiletype sh au BufRead,BufNewFile *.config setfiletype conf au BufRead,BufNewFile [Ss]nakefile.* setfiletype snakemake au BufWritePost * if search('\s\+$', 'wn') | call WhitespaceWarn() | endif au BufRead,BufNewFile * setlocal textwidth=0 | setlocal colorcolumn= au BufRead,BufNewFile *.md setlocal textwidth=80 | setlocal colorcolumn=80 au BufRead,BufNewFile *.py setlocal colorcolumn=100 if exists(":NERDTree") " Open NERDTree if no file specified au StdinReadPre * let s:std_in=1 au VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif endif au BufEnter,FocusGained,InsertLeave * set rnu au BufLeave,FocusLost,InsertEnter * set nornu endif set updatetime=1000 " Default is 4s, but reduce it to make things more real time, like git gutter highlight Search ctermbg=5 highlight ColorColumn ctermbg=4 filetype plugin indent on " required syntax on set tabstop=4 " show existing tab with 4 spaces width set shiftwidth=4 " when indenting with '>', use 4 spaces width set expandtab " On pressing tab, insert 4 spaces set mouse=a set hlsearch set scrolloff=5 " Don't let cursor be within 5 lines from top or bottom " Warn for trailing whitespace. Search with wrap (w) do not move cursor (n) function! WhitespaceWarn() if &ft =~ 'markdown' return endif echohl WarningMsg echo 'Found whitespace.' echohl None echon ' Type :TrailWhitespace to remove it' endfunction function! StripTrailingWhitespace() " Save cursor position let l:save = winsaveview() " Remove trailing whitespace %s/\s\+$//e " Move cursor to original position call winrestview(l:save) echo "Stripped trailing whitespace" endfunction command TrailWhitespace call StripTrailingWhitespace() " Hybrid line numbers on active buffer set nu rnu " Do incremental searching when it's possible to timeout. if has('reltime') set incsearch endif " Copy to the end of line noremap Y y$ " define upper case versions of :w and :q command! -bang -range=% -complete=file -nargs=* W ,write command! -bang Q quit " fugitive.vim looks for tags in .git " set tags +=~/tags " Recursively move upwards in tree, searching in subfolders for tags file " Status line set laststatus=2 set statusline= if exists('g:loaded_fugitive') set statusline+=%#StatusLineTerm# endif set statusline+=%{FugitiveStatusline()} set statusline+=%#MoreMsg# set statusline+=\ %f set statusline+=%m\ " set statusline+=%= set statusline+=%#WildMenu# set statusline+=%y set statusline+=\ %p%% set statusline+=\ %l:%c" set statusline+=%#MoreMsg# set statusline+=\ " " CtrlP let g:ctrlp_working_path_mode = 'ra' " Find project root let git_dir_location=finddir('.git', ';') let git_root_location=fnamemodify(git_dir_location, ':h') " Simulate maximize/minimize window nnoremap m :call ToggleMiniMaxiWin() nnoremap wm :call ToggleMiniMaxiWin() function! ToggleMiniMaxiWin() if tabpagewinnr(tabpagenr(), '$') > 1 tab split elseif tabpagenr('$') > 1 if tabpagenr() < tabpagenr('$') tabclose tabprevious else tabclose endif endif endfunction " Key binds " command! Csc cscope find c " Easymotion leader map (easymotion-prefix) " Forwards and backwards jump and visual select map (easymotion-s) map (easymotion-s) " Forwards and backwards word jump map w (easymotion-bd-w) " Easymotion overwin line nmap l (easymotion-overwin-line) " Easymotion search nmap (easymotion-sn) nmap (easymotion-tn) " Replace the word under cursor nnoremap * :%s/\<\>//g " Replace visual selection vnoremap * y:%sno/"//g nmap :NERDTreeToggle nmap :NERDTreeFind map :call CurtineIncSw() nmap cf :cd %:p:h " Change dir to parent of current file nmap cg :cd $git_root_location " Change dir to git root nmap vs :sp $MYVIMRC nmap vv :vsp $MYVIMRC nmap vt :tabnew $MYVIMRC nmap vo :e $MYVIMRC nmap v :e $MYVIMRC " Match git conflict markers nmap /g /[<=>]\{7,}.*$ " Git-Gutter status, commit, grep, blame nmap gs :Gstatus nmap gS :!git add % nmap gc :Gcommit nmap gg :Ggrep nmap gb :Gblame " Toggle wrapping of long lines nmap l :set wrap! " Strip trailing whitespace nmap :TrailWhitespace " Scroll window while keeping cursor on same line with shift nmap nmap vmap vmap " Misc. map n :noh vmap T :'<,'> Tabularize / nnoremap c :execute "set colorcolumn=" . (&colorcolumn == "" ? "120" : "")