Files
skel/dotfiles/vimrc
David Tomaschik c0fd99afd6 Conditional ycm
2026-02-10 16:33:10 -08:00

205 lines
5.2 KiB
VimL

" 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 <S-Tab> <C-d>
" 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.vim'
Plug 'sirtaj/vim-openscad'
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-surround'
Plug 'vim-syntastic/syntastic'
Plug 'vimwiki/vimwiki'
let s:ycm_build_tools = (
\ executable('cmake') &&
\ executable('python3-config') &&
\ executable('gcc') || executable('clang'))
let s:ycm_dir = expand('~/.vim/plugged/youcompleteme/')
let s:ycm_bin = s:ycm_dir . 'third_party/ycmd/ycm_core.so'
if s:ycm_build_tools || filereadable(s:ycm_bin)
Plug 'ycm-core/YouCompleteMe', { 'do': './install.py --all' }
endif
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 <leader>hs :set hlsearch! hlsearch?<CR>
" 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 <silent> <F5> :SyntasticCheck<CR> :Errors<CR>
" 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()