You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
336 lines
11 KiB
336 lines
11 KiB
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
" .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
|
|
|
|
|
|
|
|
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
" 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
|
|
|
|
syntax spell toplevel
|
|
|
|
|
|
|
|
|
|
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
" Key mapping customizations
|
|
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
" Turn off search highlighting with Enter
|
|
nnoremap <silent> <C-@> :nohlsearch<CR>
|
|
nnoremap <silent> <C-l> :GitGutter<CR>:nohlsearch<CR><C-l>
|
|
nnoremap <silent> <CR> :nohlsearch<CR><CR>
|
|
|
|
" 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 <C-n> <C-e>
|
|
noremap <C-p> <C-y>
|
|
inoremap <C-n> <C-o><C-e>
|
|
inoremap <C-p> <C-o><C-y>
|
|
|
|
" 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 '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"))
|
|
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 <C-_> :NERDTreeToggle<CR>
|
|
nnoremap <F2> :ALEToggle<CR>
|
|
nmap <silent> [W <Plug>(ale_first)
|
|
nmap <silent> ]W <Plug>(ale_last)
|
|
nmap <silent> [w <Plug>(ale_previous_wrap)
|
|
nmap <silent> ]w <Plug>(ale_next_wrap)
|
|
nmap <silent> [e <Plug>(ale_previous_wrap_error)
|
|
nmap <silent> ]e <Plug>(ale_next_wrap_error)
|
|
|
|
|
|
|
|
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
" End
|
|
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|