" Tom Ryder (tejr)'s vimrc: " " This file is not truly self-contained; it should run without errors on its " own without the accompanying plugins to which it refers near the end of this " file, but you'll get errors for some of the leader maps, for example. " Use UTF-8 by default wherever possible if has('multi_byte') set encoding=utf-8 scriptencoding utf-8 endif " Load filetype-specific plugins, indent settings, and syntax highlighting if has('autocmd') filetype plugin indent on endif " Options dependent on the syntax feature if has('syntax') && !has('g:syntax_on') " Use syntax highlighting syntax enable " Use the 'sahara' colorscheme if using the GUI or if we have 256 colors if has('gui_running') || &t_Co >= 256 silent! colorscheme sahara endif " If we couldn't use 'sahara', just flag a dark background (the author is " almost certainly using one), and we'll use the default colorscheme 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 shiftround " Round indenting to multiples of 4 set shiftwidth=4 " Indent with four spaces set softtabstop=4 " Insert four spaces for a Tab press " Let me backspace over pretty much anything set backspace= set backspace+=indent " Spaces from 'autoindent' set backspace+=eol " Line breaks set backspace+=start " The start of current insertion " Never use any kind of bell, visual or not if exists('+belloff') set belloff=all else set visualbell t_vb= endif " Start with blank comment strings rather than the old default; let the " filetype handle it set comments= " Show only one line of @ symbols for a truncated last line if possible, and " show none at all if not if v:version > 704 || v:version == 704 && has('patch2109') set display=truncate else set display=lastline endif " Don't wait to see if Escape in insert mode precedes a key for an Alt binding set noesckeys " Try to set the 'j' flag for 'formatoptions', to automatically delete comment " leaders when joining lines, if supported if v:version > 703 || v:version == 703 && has('patch541') set formatoptions+=j endif " Don't join lines with two spaces at the end of sentences; I don't two-space, " despite the noble Steve Losh's exhortations set nojoinspaces " Don't bother drawing the screen while executing macros or other automated or " scripted processes, just draw the screen as it is when the operation " completes set lazyredraw " Define list 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 " Add angle brackets to pairs of characters to match set matchpairs+=<:> " Don't use modelines at all, they're apparently potential security problems " and I've never used them anyway set nomodeline " Don't assume a number with a leading zero is octal; it's far more likely a " zero-padded decimal, so increment and decrement with ^A and ^X on that basis set nrformats-=octal " Always tell me the number of lines changed by a command set report=0 " Set up short message settings set shortmess= set shortmess+=f " (file 3 of 5) -> (3 of 5) set shortmess+=i " [Incomplete last line] -> [noeol] set shortmess+=I " I donated to Uganda, thanks Bram set shortmess+=l " 999 lines, 888 characters -> 999L, 888C set shortmess+=m " [Modified] -> [+] set shortmess+=n " [New File] -> [New] set shortmess+=o " Don't stack file writing messages set shortmess+=O " Don't stack file reading messages set shortmess+=r " [readonly] -> [RO] set shortmess+=t " Truncate file message at start if too long set shortmess+=T " Truncate other message in middle if too long set shortmess+=w " written -> [w], appended -> [a] set shortmess+=x " [dos format] -> [dos] " Default to no swap files at all, let auto_cache_dirs.vim set it set noswapfile " Don't wrap by default, but use \w to toggle it on or off set nowrap " Show my current position in the status bar, default format is fine if has('cmdline_info') set ruler endif " Highlight settings for search, if available if has('extra_search') set hlsearch " Highlight completed searches... nohlsearch " ...but clear it on startup or after re-sourcing set incsearch " Show matches as I type endif " Use all ancestors of current directory for :find if has('file_in_path') set path+=** endif " Don't load menus at all in GUI mode; needs to be set here, before gVim " actually starts up if has('gui_running') set guioptions+=M endif " Line break settings and mappings if has('linebreak') " Break lines at word boundaries if possible set linebreak " Precede continued lines with '...' set showbreak=... " If we have the option, indent wrapped lines as much as the first line if exists('+breakindent') set breakindent endif endif " Use New Zealand English by default; binding later in this file allow " masquerading as a Yankee if has('spell') set spelllang=en_nz endif " When in visual block mode, let me move the cursor anywhere in the buffer; " don't restrict me only to regions with text if has('virtualedit') set virtualedit+=block endif " Configuration for the command completion feature; rather than merely cycling " through possible completions with Tab, show them above the command line if has('wildmenu') " Use the wild menu, both completing and showing all possible completions " with a single Tab press, just as I've configured Bash to do set wildmenu set wildmode=list:longest " Complete files without case sensitivity, if the option is available if exists('+wildignorecase') set wildignorecase endif endif " Configuration for window features if has('windows') " Don't resize windows we're not splitting (tmux-like; think Mondrian) set noequalalways " New split windows appear below or to the right of the existing window, " not above or to the left per the default set splitbelow if has('vertsplit') set splitright endif " Get rid of visually noisy folding characters if has('folding') let &fillchars = 'diff: ,fold: ,vert: ' endif endif " Rebind Ctrl-C in insert mode to undo the current insert operation inoremap u " Rebind in normal mode as a lazy scroll nnoremap " Preserve the flags for a pattern when repeating a substitution with & nnoremap & :&& vnoremap & :&& " Pressing ^L will clear highlighting until the next search-related operation nnoremap :nohlsearch " Cycle through things with unimpaired.vim-style bindings: " Buffers nnoremap [b :bprevious nnoremap ]b :bnext " Quicklist items (more often :helpgrep results) nnoremap [c :cprevious nnoremap ]c :cnext " Location list items nnoremap [l :lprevious nnoremap ]l :lnext " Insert blank lines above and below via my custom unimpaired.vim rip nmap [ PutBlankLinesAbove nmap ] PutBlankLinesBelow " Swap the j/gj and k/gk command pairs so that we move by screen row, not " buffer line, with j/k nnoremap j gj nnoremap k gk nnoremap gj j nnoremap gk k " Change and delete with C and D both cut off the remainder of the line from " the cursor, but Y yanks the whole line, which is inconsistent (and can be " done with yy anyway); this fixes it so it only yanks the rest of the line nnoremap Y y$ " ZA does an unconditional write for all buffers nnoremap ZA :wall! " ZW does an unconditional write for this buffer nnoremap ZW :write! " A few very important custom digraphs if has('digraphs') digraph ./ 8230 " Ellipsis (HORIZONTAL ELLIPSIS U+2026) digraph %% 8984 " Mac command key (PLACE OF INTEREST SIGN U+2318) digraph 8: 9731 " Snowman (SNOWMAN U+2603) endif " Use different keys for global and local leaders if 1 let g:mapleader = '\' let g:maplocalleader = '_' endif " Leader mappings below; we use a literal backslash rather than for " the mappings here, because I want many of these even to work on tiny " stripped-down Vims like Debian's. The settings above are for plugins. " \a toggles 'formatoptions' 'a' flag using a plugin nnoremap \a :ToggleOptionFlagLocal formatoptions a " \b toggles copy-pasteable linebreak settings nmap \b CopyLinebreakToggle " \c toggles 'cursorcolumn', \C toggles 'cursorline' nnoremap \c :set cursorcolumn! cursorcolumn? nnoremap \C :set cursorline! cursorline? " Current date and time insertion commands, requiring POSIX date(1) if has('unix') " \d: Local date nnoremap \d :read !date " \D: UTC nnoremap \D :read !date -u endif " \f shows the current 'formatoptions' at a glance nnoremap \f :set formatoptions? " \h toggles highlighting search results nnoremap \h :set hlsearch! hlsearch? " \i toggles showing matches as I enter my pattern nnoremap \i :set incsearch! incsearch? " \j jumps to buffers (jetpack) nnoremap \j :ls:buffer " \l toggles showing tab, end-of-line, and trailing whitespace nnoremap \l :set list! list? " \n toggles line numbers nnoremap \n :set number! number? " \o and \O open 'pasted insert' lines nmap \o PasteOpenBelow nmap \O PasteOpenAbove " \p toggles paste mode nnoremap \p :set paste! paste? " \r reloads .vimrc nnoremap \r :source $MYVIMRC " \s toggles spell checking nnoremap \s :setlocal spell! spell? " \t shows current filetype nnoremap \t :set filetype? " \u sets US English spelling nnoremap \u :setlocal spelllang=en_us spelllang? " \w toggles wrapping nnoremap \w :set wrap! wrap? " \x strips trailing whitespace via a custom plugin nmap \x StripTrailingWhitespace " \z sets NZ English spelling nnoremap \z :setlocal spelllang=en_nz spelllang? " Add the packaged version of matchit.vim included in the distribution, if " possible; plugin/macros.vim loads this for older Vims if has('packages') packadd! matchit endif " Disable most core plugin stuff that I don't use; after/plugin/dist.vim " clears these variables later if 1 " I use tohtml.vim often " I like matchparen.vim " I manage plugins myself with Git and a Makefile let g:loaded_getscriptPlugin = 1 let g:loaded_vimballPlugin = 1 " Vim is the wrong tool for reading archives or compressed text let g:loaded_gzip = 1 let g:loaded_tarPlugin = 1 let g:loaded_zipPlugin = 1 " I prefer filtering text with Unix tools let g:loaded_logiPat = 1 " The shell, tab completion, and 'wildmenu' are good enough let g:loaded_netrwPlugin = 1 " I don't use Vim servers let g:loaded_rrhelper = 1 " System dictionaries plus custom per-machine spell files are fine let g:loaded_spellfile_plugin = 1 endif " Source all .vim files from ~/.vim/config, which may override any of the " above runtime! config/*.vim