"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " .vimrc "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " User-specified ~/.vimrc, compatible with vim on GNU/Linux and Apple OS X "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Functionality setup "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Source a global configuration file if available if filereadable("/etc/vim/vimrc.local") source /etc/vim/vimrc.local endif " Uncomment the following to have Vim jump to the last position when reopening " a file if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif " Uncomment the following to have Vim load indentation rules and plugins " according to the detected filetype. if has("autocmd") filetype plugin indent on endif " Use plugin manager if available if (filereadable($HOME."/.vim/autoload/plug.vim")) || (filereadable("/usr/share/vim/vimfiles/autoload/plug.vim")) let g:use_pluggin_manager = 1 else let g:use_pluggin_manager = 0 endif "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Syntax highlighting "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if has("syntax") set t_Co=256 syntax on " Uncomment the following 'let' lines if using xter16 color scheme " Select colormap: 'soft', 'softlight', 'standard', or 'allblue' let xterm16_colormap = 'allblue' " Select brightness: 'low', 'med', 'high', 'default', or custom levels let xterm16_brightness = 'high' "Other override options: let xterm16fg_Cursor = '555' let xterm16bg_Normal = 'none' "Set color scheme colorscheme xterm16 endif " If using a dark background within the editing area and syntax highlighting " turn on this option as well set background=dark "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " General options selection "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ set showcmd " Show (partial) command in status line. set showmatch " Show matching brackets. set ignorecase " Do case insensitive matching set smartcase " Do smart case matching set mouse=a " Enable mouse usage (all modes) set hlsearch " Turn on search highlighting set shiftwidth=4 " Auto-indent amount when using cindent, <<, >>, etc. set softtabstop=4 " How many spaces represent a tab set tabstop=4 " Real tab size set autoindent " Indent level of new line set by previous line set cindent " Attempt to intelligently guess level of indent for new line set cinkeys-=0# " Don't un-indent comments set indentkeys-=0# " Don't un-indent comments set nf=octal,hex,alpha " additional ctrl-a increments set spell spelllang=en_us " Set spell check language set scrolloff=5 " Add visible lines beyond cursor at top or bottom of window set linebreak " Soft wrap whole words together set breakindent " Indent linebreaks to match set showbreak=\ \ \ ⇲ " Visual linebreak indicator set updatetime=100 " Make some plugins snappier set backspace=indent,eol,start " Fix OS X backspace behavior set ruler " Fix OS X missing ruler "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Filetype-specific options "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ autocmd FileType plaintex,tex,latex syntax spell toplevel autocmd FileType plaintex,tex,latex set tw=80 autocmd FileType tex,latex let g:tex_flavor = 'latex' autocmd FileType pug,jade set tw=80 autocmd FileType text set tw=80 nocindent autocmd FileType swift set noexpandtab autocmd BufNewFile,BufRead *.cu set filetype=c autocmd BufNewFile,BufRead *.tp set filetype=taskpaper aug python " to override ftype/python.vim autocmd FileType python setlocal ts=4 sts=4 sw=4 noexpandtab aug end syntax spell toplevel "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Key mapping customizations "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Turn off search highlighting with Enter nnoremap :nohlsearch nnoremap :GitGutter:nohlsearch nnoremap :nohlsearch " Center page on search noremap n nzz noremap N Nzz noremap * *zz noremap # #zz noremap g* g*zz noremap g# g#zz " Better scrolling keys noremap noremap inoremap inoremap " Allow saving files with sudo after starting vim cmap w!! w !sudo tee > /dev/null % "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Plugin helper functions "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Build script when installing/updating YouCompleteMe function! BuildYCM(info) " info is a dictionary with 3 fields " - name: name of the plugin " - status: 'installed', 'updated', or 'unchanged' " - force: set on PlugInstall! or PlugUpdate! if a:info.status == 'installed' || a:info.force " YCM dependencies for --all option: " gcc, make, cmake, python3, clang, mono, go, node.js, npm, rust, jdk8 !./install.py --all endif endfunction " Pick a more convenient spot for the latency from loading YCM let g:YouCompleteMeLazyLoaded = 0 function! LazyLoadingYMC() if g:YouCompleteMeLazyLoaded == 0 let g:YouCompleteMeLazyLoaded = 1 call plug#load('YouCompleteMe') | call youcompleteme#Enable() endif endfunction if g:use_pluggin_manager == 1 autocmd BufRead * call timer_start(1, {id->execute('call LazyLoadingYMC()')} ) " (also try BufWinEnter, InsertEnter, or CursorHold and CursorHoldI events) endif " Enable vimtex completions for YCM function! VimtexYCMSetup() if !exists('g:ycm_semantic_triggers') let g:ycm_semantic_triggers = {} endif if exists('g:vimtex#re#youcompleteme') let g:ycm_semantic_triggers.tex=g:vimtex#re#youcompleteme endif endfunction if has("autocmd") autocmd VimEnter * call VimtexYCMSetup() endif "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Plugin setup with vim-plug "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Use with :PlugInstall and :PlugUpdate "if exists('g:use_pluggin_manager') && g:use_pluggin_manager if g:use_pluggin_manager == 1 " Set custom plugin directory call plug#begin('~/.vim/vim-plug') Plug 'ycm-core/YouCompleteMe', { 'do': function('BuildYCM'), 'on': [] } Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } Plug 'dense-analysis/ale' Plug 'airblade/vim-gitgutter' Plug 'godlygeek/tabular' Plug 'tpope/vim-surround' Plug 'tpope/vim-unimpaired' Plug 'tpope/vim-speeddating' Plug 'tpope/vim-repeat' Plug 'lervag/vimtex' call plug#end() endif "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Plugin options "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Close the YCM preview window automatically let g:ycm_autoclose_preview_window_after_insertion = 1 let g:ycm_autoclose_preview_window_after_completion = 1 " Suggest language keywords let g:ycm_seed_identifiers_with_syntax = 1 " Start with ale linting disabled let g:ale_enabled = 0 "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " Plugin key mappings "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " (optionally press / instead of _ for :NERDTreeToggle) nnoremap :NERDTreeToggle nnoremap :ALEToggle nmap [W (ale_first) nmap ]W (ale_last) nmap [w (ale_previous_wrap) nmap ]w (ale_next_wrap) nmap [e (ale_previous_wrap_error) nmap ]e (ale_next_wrap_error) "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " End "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~