" Tom Ryder (tejr)'s vimrc: " " This file is designed to load without unsuppressed errors on Vim 6.0 and up. " Anything older than that will probably break. There are also some odd bits " of logic to cope with loading as much config as possible on vim-tiny. " Undo anything the operating system's vimrc may have broken runtime system.vim " Load filetype settings, plugins, and maps if has('autocmd') let g:maplocalleader = ',' filetype plugin indent on endif " Options dependent on the syntax feature if has('syntax') " Use syntax highlighting if !exists('g:syntax_on') syntax enable endif " Use my colorscheme if using the GUI or if we have 256 colors if has('gui_running') || &t_Co >= 256 silent! colorscheme sahara endif " If not sahara, then default with dark background if !exists('g:colors_name') set background=dark endif endif " The all-important default indent settings; filetypes to tweak set autoindent " Use indent of previous line on new lines set expandtab " Use spaces instead of tabs set shiftwidth=4 " Indent with four spaces set softtabstop=4 " Insert four spaces with tab key " Let me backspace over pretty much anything set backspace+=eol " Line breaks set backspace+=indent " Spaces from 'autoindent' set backspace+=start " The start of current insertion " Try to keep backups in one system-appropriate dir set backup set backupdir^=~/.vim/cache/backup if has('win32') || has('win64') set backupdir-=~/.vim/cache/backup set backupdir^=~/vimfiles/cache/backup endif " Add some paths not to back up set backupskip^=/dev/shm/* " Shared memory RAM disk set backupskip^=/var/tmp/* " Debian's $TMPDIR for sudoedit(8) if !has('unix') set backupskip-=/dev/shm/* set backupskip-=/var/tmp/* endif " Indent wrapped lines silent! set breakindent " Clear default 'comments' value, let the filetype handle it set comments= " Add completion options if exists('+completeopt') set completeopt+=longest " Insert longest common substring set completeopt+=menuone " Show the menu even if only one match endif " Give me a prompt instead of just rejecting risky :write, :saveas set confirm " Only turn on 'cursorline' if my colorscheme loaded if exists('+cursorline') if exists('g:colors_name') && g:colors_name ==# 'sahara' set cursorline endif endif " Try to keep swapfiles in one system-appropriate dir set directory^=~/.vim/cache/swap// if has('win32') || has('win64') set directory-=~/.vim/cache/swap// set directory^=~/vimfiles/cache/swap// endif " Use UTF-8 if we can and env LANG didn't tell us not to if has('multi_byte') && !exists('$LANG') && &encoding ==# 'latin1' set encoding=utf-8 endif " Don't wait for a key after Escape in insert mode " In vim-tiny but not NeoVim, so just suppress errors silent! set noesckeys " Fold based on indent, but only when I ask if has('folding') set foldlevelstart=99 set foldmethod=indent endif " Delete comment leaders when joining lines, if supported silent! set formatoptions+=j " If available, use GNU grep niceties for searching if system('grep --version') =~# '^grep (GNU grep)' set grepprg=grep\ -HnRs\ --exclude='.git*' endif " Don't load GUI menus; set here before GUI starts if has('gui_running') set guioptions+=M endif " Allow buffers to have changes without being displayed set hidden " Keep much more command and search history set history=2000 " Highlight completed searches; clear on reload set hlsearch if 1 nohlsearch endif " Don't assume I'm editing C; let the filetype set this set include= " Show search matches as I type my pattern set incsearch " Don't join lines with two spaces at the end of sentences set nojoinspaces " Don't show a statusline if there's only one window " This is the Vim default, but NeoVim changed it if &laststatus set laststatus=1 endif " Don't redraw the screen during batch execution set lazyredraw " Break lines at word boundaries set linebreak " Define extra 'list' display characters set listchars+=extends:> " Unwrapped text to screen right set listchars+=precedes:< " Unwrapped text to screen left set listchars+=tab:>- " Tab characters, preserve width set listchars+=trail:_ " Trailing spaces silent! set listchars+=nbsp:+ " Non-breaking spaces " Don't allow setting options via buffer content set nomodeline " Treat numbers with a leading zero as decimal, not octal set nrformats-=octal " Options for file search with gf/:find set path-=/usr/include " Let the C/C++ filetypes set that set path+=** " Search current directory's whole tree " Disable command line display of file position " This is the Vim default, but NeoVim changed it if &ruler set noruler endif " Make sessions usable if exists('+sessionoptions') set sessionoptions-=localoptions " No buffer options or mappings set sessionoptions-=options " No global options or mappings endif " Don't show startup splash screen (I donated) set shortmess+=I " Prefix wrapped rows with three dots set showbreak=... " New windows go below or to the right of a split set splitbelow set splitright " Give me a bit longer to complete mappings set timeoutlen=3000 " No terminal mouse, even if we could silent! set ttymouse= " Keep undo files, hopefully in a dedicated directory if has('persistent_undo') set undofile set undodir^=~/.vim/cache/undo// if has('win32') || has('win64') set undodir-=~/.vim/cache/undo// set undodir^=~/vimfiles/cache/undo// endif endif " Wildmenu settings; see also plugin/wildignore.vim set wildmenu " Use wildmenu set wildmode=list:longest " Tab press completes and lists silent! set wildignorecase " Case insensitive, if supported " Let me move beyond buffer text in visual block mode if exists('+virtualedit') set virtualedit+=block endif " Stack normal/visual/select Ctrl-L to clear search highlight nnoremap :nohlsearch vnoremap :nohlsearchgv " Remap insert Ctrl-C to undo the escaped insert operation if &loadplugins imap (InsertCancel) endif " Map double Ctrl-K in insert mode to search digraph names imap (DigraphSearch) " Remap normal space to scroll down a page nnoremap " If we have plugins, do a :next after hitting the last line if &loadplugins nmap (ScrollNext) endif " Remap normal/visual & to preserve substitution flags nnoremap & :&& if exists(':xnoremap') xnoremap & :&& endif " Map g: as a 'colon operator' nmap g: (ColonOperator) " Cycle through argument list nnoremap [a :previous nnoremap ]a :next " Cycle through buffers nnoremap [b :bprevious nnoremap ]b :bnext " Cycle through quicklist/:helpgrep items nnoremap [c :cprevious nnoremap ]c :cnext " Cycle through location list items nnoremap [l :lprevious nnoremap ]l :lnext " Insert blank lines around current line nmap [ (PutBlankLinesAbove) nmap ] (PutBlankLinesBelow) " Normal leader maps; use not for vim-tiny " \a toggles 'formatoptions' 'a' flag using a plugin nnoremap a :ToggleFlagLocal formatoptions a " \b toggles copy-pasteable linebreak settings nmap b (CopyLinebreakToggle) " \c toggles 'cursorline'; no visual mode map as it doesn't work nnoremap c :setlocal cursorline! cursorline? " \C toggles 'cursorcolumn'; works in visual mode nnoremap C :setlocal cursorcolumn! cursorcolumn? if exists(':xnoremap') xnoremap C :setlocal cursorcolumn! cursorcolumn?gv endif " \d inserts the local date (POSIX date) nnoremap d :read !date " \D inserts the UTC date (POSIX date) nnoremap D :read !date -u " \e forces a buffer to be editable nnoremap e :setlocal modifiable noreadonly " \f shows the current 'formatoptions' at a glance nnoremap f :setlocal formatoptions? " \F reloads filetype plugins nnoremap F :doautocmd filetypedetect BufRead " \g changes directory to the current file's location nnoremap g :cd %:h:pwd " \h toggles highlighting search results nnoremap h :set hlsearch! hlsearch? " \H shows command history nnoremap H :history : " \i toggles showing matches as I enter my pattern nnoremap i :set incsearch! incsearch? " \j jumps to buffers (jetpack) nnoremap j :buffers:buffer " \k shows my marks nnoremap k :marks " \l toggles showing tab, end-of-line, and trailing whitespace nnoremap l :setlocal list! list? if exists(':xnoremap') xnoremap l :setlocal list! list?gv endif " \m shows normal maps nnoremap m :map " \M shows buffer-local normal maps nnoremap M :map " \n toggles line number display nnoremap n :setlocal number! number? if exists(':xnoremap') xnoremap n :setlocal number! number?gv endif " \N toggles position display in bottom right nnoremap N :set ruler! ruler? if exists(':xnoremap') xnoremap N :set ruler! ruler?gv endif " \o opens a line below in paste mode nmap o (PasteOpenBelow) " \O opens a line above in paste mode nmap O (PasteOpenAbove) " \p toggles paste mode nnoremap p :set paste! paste? " \q formats the current paragraph nnoremap q gqap " \r acts as a replacement operator nmap r (ReplaceOperator) if exists(':xmap') xmap r (ReplaceOperator) endif " \R reloads ~/.vimrc nnoremap R :source $MYVIMRC " \s toggles spell checking nnoremap s :setlocal spell! spell? " \t shows current filetype nnoremap t :setlocal filetype? " \T clears filetype nnoremap T :setlocal filetype= " \u sets US English spelling (compare \z) nnoremap u :setlocal spelllang=en_us " \v shows all global variables nnoremap v :let g: v: " \V shows all local variables nnoremap V :let b: t: w: " \w toggles wrapping nnoremap w :setlocal wrap! wrap? if exists(':xnoremap') xnoremap w :setlocal wrap! wrap?gv endif " \x strips trailing whitespace via a custom plugin nmap x :StripTrailingWhitespace if exists(':xmap') xmap x :StripTrailingWhitespace endif " \X squeezes repeated blank lines via a custom plugin nmap X :SqueezeRepeatBlanks if exists(':xmap') xmap X :SqueezeRepeatBlanks endif " \y shows all registers nnoremap y :registers " \z sets NZ English spelling (compare \u) nnoremap z :setlocal spelllang=en_nz " \= runs the whole buffer through =, preserving position nnoremap = :call vimrc#Anchor('1G=G') " \+ runs the whole buffer through gq, preserving position nnoremap + :call vimrc#Anchor('1GgqG') " \. runs the configured make program into the location list nnoremap . :lmake! " \< and \> adjust indent of last edit; good for pasting nnoremap :'[,'] nnoremap > :'[,']> " \_ uses last changed or yanked text as a characterwise object onoremap _ :normal! `[v`] " \% uses entire buffer as a linewise object onoremap % :normal! 1GVG " \{ and \} move to lines with non-space chars before current column nmap { (VerticalRegionUpNormal) nmap } (VerticalRegionDownNormal) omap { (VerticalRegionUpOperator) omap } (VerticalRegionDownOperator) if exists(':xmap') xmap { (VerticalRegionUpVisual) xmap } (VerticalRegionDownVisual) endif " \/ types :vimgrep for me ready to enter a search pattern nnoremap / :vimgrep /\c/ ** " \? types :helpgrep for me ready to enter a search pattern nnoremap ? :helpgrep \c " \DEL deletes the current buffer nnoremap :bdelete " \INS edits a new buffer nnoremap :enew " Execution mappings; each of these clobbers register z " \@ executes line in normal mode nnoremap @ ^"zyg_@z " \: executes line in command mode nnoremap : ^"zyg_:z " \! executes line with 'shell' nnoremap ! ^"zyg_:!z " Source any .vim files from ~/.vim/config runtime! config/*.vim