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.
		
		
		
		
		
			
		
			
				
					
					
						
							341 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
		
			
			
				
					
				
				
					
				
			
		
		
	
	
							341 lines
						
					
					
						
							12 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
							 | 
						|
								"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
							 | 
						|
								
							 | 
						|
								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>
							 | 
						|
								
							 | 
						|
								" 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 <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 '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 <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
							 | 
						|
								"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
							 |