"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " .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' " let xterm16fg_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 " Remove background color from sign column/gutter highlight clear SignColumn "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " 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 nohlsearch " Turn off search highlighting "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 set noexpandtab "set nowrap "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " 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,markdown 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 aug scss " to override ftype/scss.vim autocmd FileType scss setlocal ts=4 sts=4 sw=4 noexpandtab aug end aug markdown " to override ftype/scss.vim autocmd FileType markdown 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 " Yank to global clipboard noremap Y "+y " Center page on search (breaks 'search hit bottom...' message) "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 'ycm-core/YouCompleteMe', { 'do': function('BuildYCM') } 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 'tpope/vim-fugitive' Plug 'lervag/vimtex' Plug 'junegunn/goyo.vim' Plug 'junegunn/limelight.vim' Plug 'joshdick/onedark.vim', { 'branch': 'main' } 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 " Activate Limelight with Goyo and fix colors autocmd! User GoyoEnter Limelight autocmd! User GoyoLeave Limelight! let g:limelight_conceal_ctermfg = 'gray' let g:limelight_conceal_guifg = 'DarkGray' " Set up color scheme for onedark.vim let s:colors = onedark#GetColors() let g:onedark_terminal_italics = 0 let g:onedark_color_overrides = { \ "comment_grey": { "gui": "#8888A2", "cterm": "59", "cterm16": "7" } \} "Use 24-bit (true-color) mode in Vim/Neovim when outside tmux. "If you're using tmux version 2.2 or later, you can remove the outermost $TMUX check and use tmux's 24-bit color support "(see < http://sunaku.github.io/tmux-24bit-color.html#usage > for more information.) if (empty($TMUX)) if (has("nvim")) "For Neovim 0.1.3 and 0.1.4 < https://github.com/neovim/neovim/pull/2198 > let $NVIM_TUI_ENABLE_TRUE_COLOR=1 endif "For Neovim > 0.1.5 and Vim > patch 7.4.1799 < https://github.com/vim/vim/commit/61be73bb0f965a895bfb064ea3e55476ac175162 > "Based on Vim patch 7.4.1770 (`guicolors` option) < https://github.com/vim/vim/commit/8a633e3427b47286869aa4b96f2bfc1fe65b25cd > " < https://github.com/neovim/neovim/wiki/Following-HEAD#20160511 > " if (has("termguicolors")) " disabling this seems to fix colors over Shelly " set termguicolors " endif endif if (has("autocmd")) augroup colorextend autocmd! " Override the `Identifier` background color in GUI mode autocmd ColorScheme * call onedark#extend_highlight("String", { "fg": s:colors.cyan }) "autocmd ColorScheme * call onedark#extend_highlight("String", { "fg": { "gui": "#AAFFFF" } }) augroup END augroup colorset autocmd! autocmd ColorScheme * call onedark#set_highlight("SpellBad", { "gui": "underline", "cterm": "underline" }) autocmd ColorScheme * call onedark#set_highlight("SpellCap", { "gui": "italic", "cterm": "italic" }) autocmd ColorScheme * call onedark#set_highlight("SpellRare", { "gui": "italic", "cterm": "italic" }) autocmd ColorScheme * call onedark#set_highlight("SpellLocal", { }) autocmd ColorScheme * call onedark#set_highlight("Keyword", { "fg": s:colors.blue }) autocmd ColorScheme * call onedark#set_highlight("Identifier", { "fg": s:colors.blue }) augroup END endif " onedark.vim override: Don't set a background color when running in a terminal; " `gui` is the hex color code used in GUI mode/nvim true-color mode " `cterm` is the color code used in 256-color mode " `cterm16` is the color code used in 16-color mode if (has("autocmd") && !has("gui_running")) augroup colorsetdefault autocmd! "let s:white = { "gui": "#ABB2BF", "cterm": "145", "cterm16" : "7" } let s:white = { "gui": "#FFFFFF", "cterm": "255", "cterm16" : "15" } autocmd ColorScheme * call onedark#set_highlight("Normal", { "fg": s:white }) " `bg` will not be styled since there is no `bg` setting augroup END endif syntax on colorscheme onedark "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ " 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 "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~