" Allow full use of vim options set nocompatible " Setup paths set backupdir=~/.cache/vim/backup// set directory=~/.cache/vim/swap// set undodir=~/.cache/vim/undo// if !isdirectory($HOME . '/.cache/vim/swap') silent !mkdir -p ~/.cache/vim/{backup,swap,undo} endif " vim-plug plugin list call plug#begin('~/.vim/plugged') Plug 'lifepillar/vim-solarized8' Plug 'tpope/vim-surround' Plug 'editorconfig/editorconfig-vim' Plug 'tpope/vim-fugitive' Plug 'ctrlpvim/ctrlp.vim' call plug#end() " Make sure files get completely written, but don't write backups set nobackup set writebackup " Whitespace/indent options set autoindent set copyindent set tabstop=2 set softtabstop=2 set shiftwidth=2 set expandtab set shiftround set backspace=indent,eol,start " Shift-tab to go backwards in insert mode " Does not work with YCM inoremap " Line numbering, ruler set number set ruler " Setup viminfo for recording positions, etc. if !has('nvim') set viminfo='10,\"100,:20,%,n~/.viminfo endif " Jump back when editing a file function! ResCur() " Don't jump in git commits since they're generated. if &ft == 'gitcommit' return endif if line("'\"") <= line("$") normal! g`" return endif endfunction augroup resCur autocmd! autocmd BufWinEnter * call ResCur() augroup END " File options set encoding=utf-8 " Syntax highlighting, look and feel syntax on set background=dark if has('gui_running') set guifont=Inconsolata\ Medium\ 12 else let g:solarized_termcolors=256 let g:solarized_termtrans=1 endif if $TERM ==? 'rxvt-unicode-256color' " I have .Xresources setup for solarized let g:solarized_use16=1 endif silent! colorscheme solarized8 " Default ASM syntax for ft support let asmsyntax="nasm" " Too risky to allow file modelines set nomodeline " Automatically re-read changed files set autoread " fsync() after writing files set fsync " Text width 80 set textwidth=80 " Write via sudo cnoremap sudow w !sudo tee % >/dev/null " Search options set incsearch set ignorecase set smartcase " Optional highlighting nmap hs :set hlsearch! hlsearch? " Toggle paste mode nmap :set invpaste:set paste? imap :set invpaste:set paste? " Mediocre Hex editing in vim " Source: http://vim.wikia.com/wiki/Improved_hex_editing " TODO: move to an include command -bar Hexmode call ToggleHex() function ToggleHex() " hex mode should be considered a read-only operation " save values for modified and read-only for restoration later, " and clear the read-only flag for now let l:modified=&mod let l:oldreadonly=&readonly let &readonly=0 let l:oldmodifiable=&modifiable let &modifiable=1 if !exists("b:editHex") || !b:editHex " save old options let b:oldft=&ft let b:oldbin=&bin " set new options setlocal binary " make sure it overrides any textwidth, etc. let &ft="xxd" " set status let b:editHex=1 " switch to hex editor %!xxd else " restore old options let &ft=b:oldft if !b:oldbin setlocal nobinary endif " set status let b:editHex=0 " return to normal editing %!xxd -r endif " restore values for modified and read only state let &mod=l:modified let &readonly=l:oldreadonly let &modifiable=l:oldmodifiable endfunction " Options for syntastic let g:syntastic_enable_signs = 1 let g:syntastic_auto_loc_list = 2 let g:syntastic_check_on_wq = 0 let g:syntastic_go_checkers = ['govet', 'errcheck', 'go'] let g:syntastic_python_checkers=['flake8'] " Because XXE let g:syntastic_xml_checkers=[''] let g:syntastic_xslt_checkers=[''] autocmd BufReadPost * \ if &readonly \| let b:syntastic_mode = 'passive' \| else \| silent! unlet b:syntastic_mode \| endif " Have F5 run the tests and display errors nnoremap :SyntasticCheck :Errors " Load vim-ycm if installed on the system level " Currently only works on debian-based systems... " It also does not play nicely with virtual envs, so we skip it then if isdirectory("/usr/share/vim-youcompleteme") && empty($VIRTUAL_ENV) set runtimepath+=/usr/share/vim-youcompleteme endif let g:ycm_autoclose_preview_window_after_insertion=1 " Add rust settings let g:tmp_rust_path=trim(system("rustc --print sysroot")) if isdirectory(g:tmp_rust_path) let g:ycm_rust_toolchain_root=g:tmp_rust_path endif unlet! g:tmp_rust_path " Enable vim-bracketed-paste mode " From " https://github.com/ConradIrwin/vim-bracketed-paste/blob/master/plugin/bracketed-paste.vim if exists("g:loaded_bracketed_paste") finish endif let g:loaded_bracketed_paste = 1 let &t_ti .= "\[?2004h" let &t_te = "\e[?2004l" . &t_te function! XTermPasteBegin(ret) set pastetoggle= set paste return a:ret endfunction execute "set =\[200~" execute "set =\[201~" map XTermPasteBegin("i") imap XTermPasteBegin("") vmap XTermPasteBegin("c") cmap cmap " Include a .vimrc.local if it exists if filereadable(glob("~/.vimrc.local")) source ~/.vimrc.local endif " Options for vimoutliner autocmd Filetype votl setlocal sts=4 " Highlight whitespace at end of file highlight ExtraWhitespace ctermbg=red guibg=red autocmd Syntax * syn match ExtraWhitespace /\s\+$\| \+\ze\t/ containedin=ALL " Color column at end of lines set colorcolumn=+1 highlight ColorColumn ctermbg=black guibg=lightgrey " Remove smart quotes command Unsmartquote %s/“\|”/"/g " Markdown options autocmd Filetype markdown set expandtab shiftwidth=4 " Python options autocmd Filetype python set expandtab shiftwidth=4 " Makefile options autocmd BufRead,BufNewFile Makefile* set noexpandtab " Enable filetype support " Needs to be at end of vimrc filetype plugin indent on " Disable bell set belloff=all " Fix trailing whitespace function! SaveFixSpace() let l:denylist = ['diff', 'patch', 'mail', 'gitcommit', 'markdown'] if index(l:denylist, &filetype) != -1 return endif let l:save = winsaveview() " Execute the substitution on the range provided to the command execute a:firstline . ',' . a:lastline . 's/\s\+$//e' call winrestview(l:save) endfunction augroup CleanWhitespace autocmd! " This calls the command on the whole file (%) before writing the buffer autocmd BufWritePre * :FixSpace augroup END command! -range=% FixSpace ,call SaveFixSpace()