" 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 " 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 " Load vim-plug plugins, if vim-plug is installed if !empty(globpath(&rtp, 'autoload/plug.vim')) call plug#begin('~/.vim/plugged') Plug 'MaxMEllon/vim-jsx-pretty' Plug 'ctrlpvim/ctrlp.vim' Plug 'earthly/earthly.vim' Plug 'editorconfig/editorconfig-vim' Plug 'fatih/vim-go' Plug 'grailbio/bazel-compilation-database' Plug 'isobit/vim-caddyfile' Plug 'lifepillar/vim-solarized8' Plug 'mustache/vim-mustache-handlebars' Plug 'rust-lang/rust' Plug 'sirtaj/vim-openscad' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-surround' Plug 'vim-syntastic/syntastic' Plug 'vimwiki/vimwiki' Plug 'ycm-core/YouCompleteMe', { 'do': './install.py --all' } call plug#end() endif " 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? " 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 and compiled if filereadable(expand('~/.vim/plugged/YouCompleteMe/python/ycm/ycm_core.so')) 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 endif " 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 on save function! StripTrailingWhitespace() " Don't modify files that are read-only, or certain filetypes if &readonly || index(['diff', 'patch', 'mail', 'gitcommit', 'markdown'], &filetype) != -1 return endif let l:view = winsaveview() " Using silent! to suppress errors if no matches are found silent! %s/\s\+$//e call winrestview(l:view) endfunction augroup StripTrailingWhitespaceGroup autocmd! autocmd BufWritePre * call StripTrailingWhitespace() augroup END command! StripSpace call StripTrailingWhitespace()