diff options
Diffstat (limited to 'vim/vimrc')
-rw-r--r-- | vim/vimrc | 113 |
1 files changed, 56 insertions, 57 deletions
@@ -1,13 +1,10 @@ " Tom Ryder (tejr)'s vimrc: <https://sanctum.geek.nz/cgit/dotfiles.git> " Requires Vim 7.0 or newer with +eval. -" Set an environment variable for the user runtime directory +" Set an environment variable for the user runtime directory, if not already +" set; use the first element of &runtimepath, rather like 'spellfile' if !exists('$MYVIM') - let $MYVIM = expand( - \ has('win32') || has('win64') - \ ? '~/vimfiles' - \ : '~/.vim' - \ ) + let $MYVIM = expand(split(&runtimepath, ',')[0]) endif " The all-important default indent settings; filetypes to tweak @@ -15,35 +12,31 @@ set autoindent " Use indent of previous line on new lines set expandtab " Use spaces instead of tabs set shiftwidth=4 " Indent with four spaces -" The number of spaces the Tab key should insert should follow 'shiftwidth'; -" if Vim is new enough (v7.3.693), use a negative value to automate this, -" otherwise just use its present value -if v:version > 703 - \ || v:version == 703 && has('patch693') - set softtabstop=-1 -else - let &softtabstop = &shiftwidth -endif +" Make insert mode tab key add the same number of spaces as 'shiftwidth', use +" negative value to do this if Vim new enough to support it +let &softtabstop = + \ v:version > 703 || v:version == 703 && has('patch693') + \ ? -1 + \ : &shiftwidth + +" Restore insert mode 'backspace' limits to the stringent Vim default, if a +" system vimrc or Neovim has messed with it +set backspace= -" Try to keep backups in one system-appropriate directory, including full -" encoded path in filename (trailing double slash) if supported (v8.1.251) +" Keep backup files in dedicated directory set backup -if has('patch-8.1.251') +if has('patch-8.1.251') " Can keep full path in filename set backupdir^=$MYVIM/cache/backup// else set backupdir^=$MYVIM/cache/backup endif -" Restore insert mode 'backspace' limits to the stringent Vim default, if a -" system vimrc or Neovim's heretical defaults has messed with it -set backspace= - " Add some *nix paths not to back up -" /dev/shm: Shared memory RAM disk -" /usr/tmp: Hard-coded path for `sudo -e` 1/2 -" /var/tmp: Hard-coded path for `sudo -e` 2/2 if has('unix') - set backupskip^=/dev/shm/*,/usr/tmp/*,/var/tmp/* + set backupskip& " Reset to avoid duplicates (Vim bug?) + set backupskip+=/dev/shm/* " Shared memory RAM disk + set backupskip+=/usr/tmp/* " Hard-coded path for `sudo -e` 1/2 + set backupskip+=/var/tmp/* " Hard-coded path for `sudo -e` 2/2 endif " Indent wrapped lines if supported (v7.4.338) @@ -56,9 +49,8 @@ set comments= set commentstring= " Add completion options -" longest: Insert longest common substring -" menuone: Show the menu even if only one match -set completeopt+=longest,menuone +set completeopt+=longest " Insert longest common substring +set completeopt+=menuone " Show the menu even if only one match " Give me a prompt instead of just rejecting risky :write, :saveas set confirm @@ -66,14 +58,11 @@ set confirm " Sentence objects are separated by two spaces set cpoptions+=J -" Try to keep swap files in one system-appropriate directory, including full -" encoded path in filename (trailing double slash) +" Keep swap files in dedicated directory, named with full path set directory^=$MYVIM/cache/swap// -" Use UTF-8 if we can and $LANG doesn't tell us not to -if has('multi_byte') - \ && !exists('$LANG') - \ && &encoding ==# 'latin1' +" If the environment didn't set an encoding, use UTF-8, not ASCII +if !exists('$LANG') set encoding=utf-8 endif @@ -87,13 +76,13 @@ endif set foldlevelstart=99 set foldmethod=indent -" Delete comment leaders when joining lines, if supported (v7.3.541) +" Delete comment leaders when joining lines, if supported if v:version > 703 \ || v:version == 703 && has('patch541') set formatoptions+=j endif -" Don't break a single space after a period, if supported (v8.1.728) +" Don't break a single space after a period, if supported if has('patch-8.1.728') set formatoptions+=p endif @@ -131,12 +120,14 @@ set lazyredraw set linebreak " Define extra 'list' display characters -" extends: Unwrapped text to screen right -" nbsp: Non-breaking spaces -" precedes: Unwrapped text to screen left -" tab: Tab characters, preserve width -" trail: Trailing spaces -set listchars+=extends:>,nbsp:+,precedes:<,tab:>-,trail:- +if has('nvim') " Neovim adds duplicates otherwise + set listchars&vi +endif +set listchars+=tab:>- " Tab characters, preserve width +set listchars+=trail:- " Trailing spaces +set listchars+=extends:> " Unwrapped text to screen right +set listchars+=precedes:< " Unwrapped text to screen left +set listchars+=nbsp:+ " Non-breaking spaces " Don't allow setting options via buffer content set nomodeline @@ -151,7 +142,7 @@ set path-=/usr/include " has switched it on set noruler -" Remove Debian's 'runtimepath' nonsense if present +" Remove Debian's 'runtimepath' addenda if present set runtimepath-=/var/lib/vim/addons set runtimepath-=/var/lib/vim/addons/after @@ -177,20 +168,27 @@ if &term =~# '^putty' set ttyfast endif -" No terminal mouse, even if we could; the manual says to set 't_RV', but -" doing that doesn't seem to prevent 'ttyfast' from being set; check for -" option existence as this is not an option in Neovim -if exists('+ttymouse') +" Don't use terminal mouse support, even if it would work; the manual says to +" set 't_RV' to do this, but that doesn't seem to work +if exists('+ttymouse') " No such option in Neovim set ttymouse= endif -" Try to keep persistent undo files in one system-appropriate directory -" (v7.2.438), including full encoded path in filename (trailing double slash) -if has('persistent_undo') +" Keep persistent undo files in dedicated directory, named with full path +if has('persistent_undo') " v7.2.438 set undofile set undodir^=$MYVIM/cache/undo// endif +" Keep the viminfo file in the home Vim directory, mostly to stop history +" getting clobbered when something runs Vim without using this vimrc +let $VIMINFO = $MYVIM.'/viminfo' +if exists('+viminfofile') " Use new option method if we can (v8.1.716) + let &viminfofile = $VIMINFO +else " Resort to clunkier method with 'viminfo' option flag + execute 'set viminfo+=n'.escape($VIMINFO, '\ ') +endif + " Let me move beyond buffer text in visual block mode set virtualedit+=block @@ -226,7 +224,6 @@ endif set wildmode=list:longest " Tab press completes and lists " Load filetype settings, plugins, and maps -let maplocalleader = ',' filetype plugin indent on " Use syntax highlighting @@ -240,9 +237,7 @@ try colorscheme sahara set cursorline catch - if &background != 'dark' " Avoid reloading syntax files unnecessarily - set background=dark - endif + set background=dark endtry " Remap normal space to scroll down a page @@ -292,6 +287,10 @@ nnoremap ]l :lnext<CR> nmap [<Space> <Plug>(PutBlankLinesAbove) nmap ]<Space> <Plug>(PutBlankLinesBelow) +" Set leader keys +let mapleader = '\' +let maplocalleader = ',' + " \a toggles 'formatoptions' 'a' flag using a plugin nnoremap <Leader>a :<C-U>ToggleFlagLocal formatoptions a<CR> @@ -415,9 +414,9 @@ nnoremap <Leader>y :<C-U>registers<CR> nnoremap <Leader>z :<C-U>setlocal spelllang=en_nz<CR> " \= runs the whole buffer through =, preserving position -nnoremap <Leader>= :<C-U>call vimrc#Anchor('1G=G')<CR> +nnoremap <Leader>= m`1G=G`` " \+ runs the whole buffer through gq, preserving position -nnoremap <Leader>+ :<C-U>call vimrc#Anchor('1GgqG')<CR> +nnoremap <Leader>+ m`1GgqG`` " \. runs the configured make program into the location list nnoremap <Leader>. :<C-U>lmake!<CR> |