aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-11-11 00:01:00 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-11-11 00:01:00 +1300
commit687559d5400e5c34967cb84040c32a52720078d0 (patch)
tree7f5310c4b573221353640d639f5a7627f0d0ccb0
parentMerge branch 'feature/oii-fix' into develop (diff)
parentSort 'shortmess' flag settings alphabetically (diff)
downloaddotfiles-687559d5400e5c34967cb84040c32a52720078d0.tar.gz
dotfiles-687559d5400e5c34967cb84040c32a52720078d0.zip
Merge branch 'feature/vimrc-reunify' into develop
* feature/vimrc-reunify: (23 commits) Sort 'shortmess' flag settings alphabetically Add 'o' and 'O' back into 'shortmess' Set up individual flags for 'shortmess' Use exists+ test rather than exists& Adjust some whitespace and comment layout Move matchit.vim sourcing into plugin.vim Rename netrw.vim to plugin.vim Remove 'shellslash' setting Move fedora.vim into os.vim Remove 'tildeop' setting Rearrange three smaller files into display.vim Move 'paste' options into terminal.vim Move wildmenu config into completion.vim Rename complete.vim to completion.vim Rename term.vim to terminal.vim Rename yank.vim to registers.vim Move nrformats.vim content to format.vim Rename startup.vim to messages.vim Merge encoding.vim and file.vim into files.vim Move backup, swap, and undo dir logic into plugins ...
-rw-r--r--vim/config/backup.vim33
-rw-r--r--vim/config/case.vim3
-rw-r--r--vim/config/command.vim11
-rw-r--r--vim/config/complete.vim3
-rw-r--r--vim/config/completion.vim (renamed from vim/config/wildmenu.vim)7
-rw-r--r--vim/config/display.vim41
-rw-r--r--vim/config/encoding.vim4
-rw-r--r--vim/config/files.vim (renamed from vim/config/file.vim)5
-rw-r--r--vim/config/format.vim5
-rw-r--r--vim/config/indent.vim24
-rw-r--r--vim/config/join.vim10
-rw-r--r--vim/config/list.vim10
-rw-r--r--vim/config/match.vim6
-rw-r--r--vim/config/nrformats.vim3
-rw-r--r--vim/config/number.vim5
-rw-r--r--vim/config/os.vim (renamed from vim/config/fedora.vim)0
-rw-r--r--vim/config/paste.vim6
-rw-r--r--vim/config/plugin.vim (renamed from vim/config/netrw.vim)4
-rw-r--r--vim/config/registers.vim (renamed from vim/config/yank.vim)0
-rw-r--r--vim/config/search.vim1
-rw-r--r--vim/config/spell.vim1
-rw-r--r--vim/config/startup.vim3
-rw-r--r--vim/config/swapfile.vim44
-rw-r--r--vim/config/terminal.vim (renamed from vim/config/term.vim)7
-rw-r--r--vim/config/undo.vim23
-rw-r--r--vim/config/whitespace.vim33
-rw-r--r--vim/config/windows.vim3
-rw-r--r--vim/config/wrap.vim6
-rw-r--r--vim/doc/auto_backupdir.txt12
-rw-r--r--vim/doc/auto_swapdir.txt12
-rw-r--r--vim/doc/auto_undodir.txt14
-rw-r--r--vim/plugin/auto_backupdir.vim56
-rw-r--r--vim/plugin/auto_swapdir.vim56
-rw-r--r--vim/plugin/auto_undodir.vim57
-rw-r--r--vim/plugin/big_file_options.vim2
-rw-r--r--vim/plugin/copy_linebreak.vim4
36 files changed, 354 insertions, 160 deletions
diff --git a/vim/config/backup.vim b/vim/config/backup.vim
index 718647fc..8735a094 100644
--- a/vim/config/backup.vim
+++ b/vim/config/backup.vim
@@ -1,26 +1,11 @@
-" Use backup features if on a UNIX-like system and not using sudo(8)
-if !strlen($SUDO_USER) && has('unix')
+" Default to no backup files at all, in a way that even ancient/tiny Vims will
+" understand; the auto_backupdir.vim plugin will take care of re-enabling this
+set nobackup
+set nowritebackup
- " Keep backups with a .bak extension in ~/.vim/backup; the double-slash at
- " the end of the directory is supposed to prod Vim into keeping the full
- " path to the file in its backup filename to avoid collisions, but I don't
- " think it actually works for backups, just undo and swap files
- set backup
- set backupext=.bak
- set backupdir^=~/.vim/backup//
+" If backps are enabled, use a more explicit and familiar backup suffix
+set backupext=.bak
- " This option already includes various temporary directories, but we
- " append to it so that we don't back up anything in a shared memory
- " filesystem either
- set backupskip+=*/shm/*
-
- " Create the backup directory if necessary and possible
- if !isdirectory($HOME . '/.vim/backup') && exists('*mkdir')
- call mkdir($HOME . '/.vim/backup', 'p', 0700)
- endif
-
-" Don't use backups at all otherwise
-else
- set nobackup
- set nowritebackup
-endif
+" Don't back up files in anything named */shm/; they might be password
+" files
+set backupskip+=*/shm/*
diff --git a/vim/config/case.vim b/vim/config/case.vim
deleted file mode 100644
index bb21aefd..00000000
--- a/vim/config/case.vim
+++ /dev/null
@@ -1,3 +0,0 @@
-" Use the tilde as an operator with motions, rather than just swapping the
-" case of the character under the cursor
-set tildeop
diff --git a/vim/config/command.vim b/vim/config/command.vim
index 09ee0f40..031772e9 100644
--- a/vim/config/command.vim
+++ b/vim/config/command.vim
@@ -4,6 +4,9 @@ set history=2000
" Always tell me the number of lines changed by a command
set report=0
+" Don't write the output of :make to the terminal
+set shellpipe=>
+
" Command-line based features
if has('cmdline_info')
@@ -15,15 +18,7 @@ if has('cmdline_info')
" Show the mode we're using if not normal mode (e.g. --INSERT--)
set showmode
-endif
-
-" Don't write the output of :make to the terminal
-set shellpipe=>
-" Always use forward slashes, I very seldom need to use Vim on Windows for
-" more than scratch space anyway
-if exists('+shellslash')
- set shellslash
endif
" \d inserts the current local date from date(1)
diff --git a/vim/config/complete.vim b/vim/config/complete.vim
deleted file mode 100644
index 5fcc0e62..00000000
--- a/vim/config/complete.vim
+++ /dev/null
@@ -1,3 +0,0 @@
-" Don't try to complete strings from included files, just use the strings in
-" the open buffers; I'll open the file if I want to complete from it
-set complete-=i
diff --git a/vim/config/wildmenu.vim b/vim/config/completion.vim
index 6036c90a..a8a5c201 100644
--- a/vim/config/wildmenu.vim
+++ b/vim/config/completion.vim
@@ -1,3 +1,7 @@
+" Don't try to complete strings from included files, just use the strings in
+" the open buffers; I'll open the file if I want to complete from it
+set complete-=i
+
" Configuration for the command completion feature; rather than merely cycling
" through possible completions with Tab, show them above the command line
if has('wildmenu')
@@ -17,7 +21,8 @@ if has('wildmenu')
endif
" Complete files without case sensitivity, if the option is available
- if exists('&wildignorecase')
+ if exists('+wildignorecase')
set wildignorecase
endif
+
endif
diff --git a/vim/config/display.vim b/vim/config/display.vim
new file mode 100644
index 00000000..43889c1a
--- /dev/null
+++ b/vim/config/display.vim
@@ -0,0 +1,41 @@
+" Set up short message settings
+set shortmess=
+" (file 3 of 5) -> (3 of 5)
+set shortmess+=f
+" [Incomplete last line] -> [eol]
+set shortmess+=i
+" I donated to Uganda, thanks Bram
+set shortmess+=I
+" 999 lines, 888 characters -> 999L, 888C
+set shortmess+=l
+" [Modified] -> [+]
+set shortmess+=m
+" [New File] -> [New]
+set shortmess+=n
+" Don't stack file writing messages
+set shortmess+=o
+" Don't stack file reading messages
+set shortmess+=O
+" [readonly] -> [RO]
+set shortmess+=r
+" Truncate file message at start if too long
+set shortmess+=t
+" Truncate other message in midle if too long
+set shortmess+=T
+" written -> [w], appended -> [a]
+set shortmess+=w
+" [dos format] -> [dos]
+set shortmess+=x
+
+" Don't show whitespace characters or end-of-line characters visually by
+" default, but make \l toggle between them
+set nolist
+nnoremap <silent>
+ \ <Leader>l
+ \ :<C-U>setlocal list! list?<CR>
+
+" Don't show line numbers by default, but \n toggles them
+set nonumber
+nnoremap <silent>
+ \ <Leader>n
+ \ :<C-U>setlocal number! number?<CR>
diff --git a/vim/config/encoding.vim b/vim/config/encoding.vim
deleted file mode 100644
index 72f2d40e..00000000
--- a/vim/config/encoding.vim
+++ /dev/null
@@ -1,4 +0,0 @@
-" Use UTF-8 by default wherever possible
-if has('multi_byte')
- set encoding=utf-8
-endif
diff --git a/vim/config/file.vim b/vim/config/files.vim
index a0c99f6c..7a23b4c5 100644
--- a/vim/config/file.vim
+++ b/vim/config/files.vim
@@ -8,6 +8,11 @@ nnoremap <silent>
\ <Leader>p
\ :<C-U>set filetype?<CR>
+" Use UTF-8 by default wherever possible
+if has('multi_byte')
+ set encoding=utf-8
+endif
+
" Use all ancestors of current directory for :find
if has('file_in_path')
set path=**
diff --git a/vim/config/format.vim b/vim/config/format.vim
index e1da2d0b..97ebcb11 100644
--- a/vim/config/format.vim
+++ b/vim/config/format.vim
@@ -1,3 +1,7 @@
+" 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
+
" Try to set the 'j' flag for 'formatoptions', to automatically delete comment
" leaders when joining lines
silent! set formatoptions+=j
@@ -30,4 +34,5 @@ if has('user_commands')
nnoremap <silent>
\ <Leader>t
\ :<C-U>ToggleOptionFlagLocal formatoptions t<CR>
+
endif
diff --git a/vim/config/indent.vim b/vim/config/indent.vim
deleted file mode 100644
index f6dfd416..00000000
--- a/vim/config/indent.vim
+++ /dev/null
@@ -1,24 +0,0 @@
-" Adopt the indent of the last line on new lines; interestingly, plugins that
-" do clever things with indenting will often assume this is set
-set autoindent
-
-" Use spaces instead of tabs
-set expandtab
-
-" Indent with four spaces when an indent operation is used
-set shiftwidth=4
-
-" Insert four spaces when Tab is pressed
-set softtabstop=4
-
-" How many spaces to show for a literal tab when 'list' is unset
-set tabstop=4
-
-" Indent intelligently to 'shiftwidth' at the starts of lines with Tab, but
-" use 'tabstop' everywhere else
-set smarttab
-
-" When indenting lines with < or >, round the indent to a multiple of
-" 'shiftwidth', so even if the line is indented by one space it will indent
-" up to 4 and down to 0, for example
-set shiftround
diff --git a/vim/config/join.vim b/vim/config/join.vim
deleted file mode 100644
index ebf42a8b..00000000
--- a/vim/config/join.vim
+++ /dev/null
@@ -1,10 +0,0 @@
-" 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
-
-" Rebind normal J to run plugin-defined join that doesn't jump around, but
-" only if we have the eval feature, because otherwise this mapping won't exist
-" and we should keep the default behaviour
-if has('eval')
- nmap J <Plug>FixedJoin
-endif
diff --git a/vim/config/list.vim b/vim/config/list.vim
deleted file mode 100644
index 1cb4345b..00000000
--- a/vim/config/list.vim
+++ /dev/null
@@ -1,10 +0,0 @@
-" Don't show whitespace characters or end-of-line characters visually by
-" default, but make \l toggle between them
-set nolist
-nnoremap <silent>
- \ <Leader>l
- \ :<C-U>setlocal list! list?<CR>
-
-" Clearly show when the start or end of the row does not correspond to the
-" start and end of the line
-set listchars+=precedes:<,extends:>
diff --git a/vim/config/match.vim b/vim/config/match.vim
index 5c53d63e..58bcce78 100644
--- a/vim/config/match.vim
+++ b/vim/config/match.vim
@@ -1,6 +1,2 @@
-" Try to run the version of matchit.vim included in the distribution, if there
-" is one; extends % to match more than it does by default
-silent! runtime macros/matchit.vim
-
" Match all forms of brackets in pairs (including angle brackets)
-set matchpairs=(:),{:},[:],<:>
+set matchpairs+=<:>
diff --git a/vim/config/nrformats.vim b/vim/config/nrformats.vim
deleted file mode 100644
index 09fe8c73..00000000
--- a/vim/config/nrformats.vim
+++ /dev/null
@@ -1,3 +0,0 @@
-" 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
diff --git a/vim/config/number.vim b/vim/config/number.vim
deleted file mode 100644
index becc20f1..00000000
--- a/vim/config/number.vim
+++ /dev/null
@@ -1,5 +0,0 @@
-" Don't show line numbers by default, but \n toggles them
-set nonumber
-nnoremap <silent>
- \ <Leader>n
- \ :<C-U>setlocal number! number?<CR>
diff --git a/vim/config/fedora.vim b/vim/config/os.vim
index ff6cadfc..ff6cadfc 100644
--- a/vim/config/fedora.vim
+++ b/vim/config/os.vim
diff --git a/vim/config/paste.vim b/vim/config/paste.vim
deleted file mode 100644
index fa26d6f4..00000000
--- a/vim/config/paste.vim
+++ /dev/null
@@ -1,6 +0,0 @@
-" Start paste mode with F10 to prevent console Vim from confusing a swathe of
-" pre-formatted pasted text with actual keyboard input, and thereby attempting
-" to indent it inappropriately. If unimpaired.vim is available, it's generally
-" nicer to use yo or yO.
-set nopaste
-set pastetoggle=<F10>
diff --git a/vim/config/netrw.vim b/vim/config/plugin.vim
index b38649b9..407f0880 100644
--- a/vim/config/netrw.vim
+++ b/vim/config/plugin.vim
@@ -1,3 +1,7 @@
+" Try to run the version of matchit.vim included in the distribution, if there
+" is one; extends % to match more than it does by default
+silent! runtime macros/matchit.vim
+
" netrw plugin configuration
if has('eval')
diff --git a/vim/config/yank.vim b/vim/config/registers.vim
index 01879aa8..01879aa8 100644
--- a/vim/config/yank.vim
+++ b/vim/config/registers.vim
diff --git a/vim/config/search.vim b/vim/config/search.vim
index ff243116..69f3f472 100644
--- a/vim/config/search.vim
+++ b/vim/config/search.vim
@@ -33,4 +33,5 @@ if has('extra_search')
\ setlocal hlsearch
augroup END
endif
+
endif
diff --git a/vim/config/spell.vim b/vim/config/spell.vim
index 7775ade9..cbbe17f1 100644
--- a/vim/config/spell.vim
+++ b/vim/config/spell.vim
@@ -17,4 +17,5 @@ if has('spell')
nnoremap <silent>
\ <Leader>z
\ :<C-U>setlocal spelllang=en_nz spelllang?<CR>
+
endif
diff --git a/vim/config/startup.vim b/vim/config/startup.vim
deleted file mode 100644
index b99bebe1..00000000
--- a/vim/config/startup.vim
+++ /dev/null
@@ -1,3 +0,0 @@
-" Don't show the Vim startup message, I have registered Vim and donated to
-" Uganda
-set shortmess+=I
diff --git a/vim/config/swapfile.vim b/vim/config/swapfile.vim
index 778ae2f0..bf91aa6b 100644
--- a/vim/config/swapfile.vim
+++ b/vim/config/swapfile.vim
@@ -1,32 +1,14 @@
-" Swap files are used if using Unix and not using sudo(8); I very seldom need
-" them, but they are occasionally useful after a crash, and they don't really
-" get in the way if kept in their own directory
-if !strlen($SUDO_USER) && has('unix')
-
- " Use swap files but keep them in ~/.vim/swap; the double-slash at the end
- " of the directory prods Vim into keeping the full path to the file in its
- " undo filename to avoid collisions; the same thing works for undo files
- set swapfile
- set directory^=~/.vim/swap//
-
- " Create the ~/.vim/swap directory if necessary and possible
- if !isdirectory($HOME . '/.vim/swap') && exists('*mkdir')
- call mkdir($HOME . '/.vim/swap', 'p', 0700)
- endif
-
- " Don't keep swap files for files in temporary directories or shared memory
- " filesystems; this is because they're used as scratch spaces for tools
- " like sudoedit(8) and pass(1) and hence could present a security problem
- if has('autocmd')
- augroup dotfiles_swap_skip
- autocmd!
- autocmd BufNewFile,BufReadPre
- \ /tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*,*/shm/*
- \ setlocal noswapfile
- augroup END
- endif
-
-" Otherwise, don't use swap files at all
-else
- set noswapfile
+" Default to no swapfile files at all, in a way that even ancient/tiny Vims
+" will understand; the auto_swapdir.vim plugin will take care of this
+set noswapfile
+
+" Don't keep swap files from temporary directories or shared memory in case
+" they're secrets
+if has('autocmd')
+ augroup dotfiles_swap_skip
+ autocmd!
+ autocmd BufNewFile,BufReadPre
+ \ /tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*,*/shm/*
+ \ setlocal noswapfile
+ augroup END
endif
diff --git a/vim/config/term.vim b/vim/config/terminal.vim
index 8dbda431..202705a7 100644
--- a/vim/config/term.vim
+++ b/vim/config/terminal.vim
@@ -1,3 +1,10 @@
+" Start paste mode with F10 to prevent console Vim from confusing a swathe of
+" pre-formatted pasted text with actual keyboard input, and thereby attempting
+" to indent it inappropriately. If unimpaired.vim is available, it's generally
+" nicer to use yo or yO.
+set nopaste
+set pastetoggle=<F10>
+
" Don't bother about checking whether Escape is being used as a means to enter
" a Meta-key combination, just register Escape immediately
set noesckeys
diff --git a/vim/config/undo.vim b/vim/config/undo.vim
index c9539665..f85d9d8c 100644
--- a/vim/config/undo.vim
+++ b/vim/config/undo.vim
@@ -4,23 +4,15 @@ inoremap <C-c> <C-c>u
" Keep screeds of undo history
set undolevels=2000
-" Keep undo history in a separate file if the feature is available, we're on
-" Unix, and not using sudo(8); this goes really well with undo visualization
-" plugins like Gundo or Undotree.
-if !strlen($SUDO_USER) && has('unix') && has('persistent_undo')
+" 'undodir' and 'undofile' settings will be taken care of by the
+" auto_undodir.vim plugin if applicable/possible
+if has('persistent_undo')
- " Keep per-file undo history in ~/.vim/undo; the double-slash at the end
- " of the directory prods Vim into keeping the full path to the file in its
- " undo filename to avoid collisions; the same thing works for swap files
- set undofile
- set undodir^=~/.vim/undo//
+ " Turn off the option by default
+ set noundofile
- " Create the ~/.vim/undo directory if necessary and possible
- if !isdirectory($HOME . '/.vim/undo') && exists('*mkdir')
- call mkdir($HOME . '/.vim/undo', 'p', 0700)
- endif
-
- " Don't track changes to sensitive files
+ " Don't keep undo files from temporary directories or shared memory in case
+ " they're secrets
if has('autocmd')
augroup dotfiles_undo_skip
autocmd!
@@ -29,4 +21,5 @@ if !strlen($SUDO_USER) && has('unix') && has('persistent_undo')
\ setlocal noundofile
augroup END
endif
+
endif
diff --git a/vim/config/whitespace.vim b/vim/config/whitespace.vim
index 24cda107..12d41a4e 100644
--- a/vim/config/whitespace.vim
+++ b/vim/config/whitespace.vim
@@ -1,2 +1,35 @@
+" Adopt the indent of the last line on new lines; interestingly, plugins that
+" do clever things with indenting will often assume this is set
+set autoindent
+
+" Use spaces instead of tabs
+set expandtab
+
+" Indent with four spaces when an indent operation is used
+set shiftwidth=4
+
+" Insert four spaces when Tab is pressed
+set softtabstop=4
+
+" Indent intelligently to 'shiftwidth' at the starts of lines with Tab, but
+" use 'tabstop' everywhere else
+set smarttab
+
+" When indenting lines with < or >, round the indent to a multiple of
+" 'shiftwidth', so even if the line is indented by one space it will indent
+" up to 4 and down to 0, for example
+set shiftround
+
+" 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
+
+" Rebind normal J to run plugin-defined join that doesn't jump around, but
+" only if we have the eval feature, because otherwise this mapping won't exist
+" and we should keep the default behaviour
+if has('eval')
+ nmap J <Plug>FixedJoin
+endif
+
" \x strips trailing whitespace via a custom plugin
nmap <Leader>x <Plug>StripTrailingWhitespace
diff --git a/vim/config/windows.vim b/vim/config/windows.vim
index a54b8997..88b38f8c 100644
--- a/vim/config/windows.vim
+++ b/vim/config/windows.vim
@@ -16,7 +16,7 @@ if has('windows')
endif
" Only show the tab bar if there's more than one tab
- if exists('&showtabline')
+ if exists('+showtabline')
set showtabline=1
endif
@@ -24,4 +24,5 @@ if has('windows')
if has('folding')
let &fillchars = 'diff: ,fold: ,vert: '
endif
+
endif
diff --git a/vim/config/wrap.vim b/vim/config/wrap.vim
index 51e9ea89..a90c2765 100644
--- a/vim/config/wrap.vim
+++ b/vim/config/wrap.vim
@@ -9,6 +9,10 @@ nnoremap <silent>
" column with @ symbols instead, which I don't find very helpful
set display=lastline
+" Clearly show when the start or end of the row does not correspond to the
+" start and end of the line
+set listchars+=precedes:<,extends:>
+
" When wrapping, j and k should move by screen row, and not to the same
" column number in the previous logical line, which feels very clumsy and is
" seldom particularly helpful; you can use n| to jump to the nth column in a
@@ -26,7 +30,7 @@ if has('linebreak')
set showbreak=...
" If we have the option, indent wrapped lines as much as the first line
- if has('&breakindent')
+ if exists('+breakindent')
set breakindent
endif
diff --git a/vim/doc/auto_backupdir.txt b/vim/doc/auto_backupdir.txt
new file mode 100644
index 00000000..c5b6ebad
--- /dev/null
+++ b/vim/doc/auto_backupdir.txt
@@ -0,0 +1,12 @@
+*auto_backupdir.txt* Automatically create 'backupdir' in 'realtimepath'
+
+Author: Tom Ryder <tom@sanctum.geek.nz>
+License: Same terms as Vim itself (see |license|)
+
+This plugin attempts to create a directory "backup" in the directory named by
+the first element of 'realtimepath', and enables 'backup' with that as the
+'backupdir' if it succeeds or if the directory already exists.
+
+This plugin lives in Tom Ryder's "dotfiles" suite, and will eventually be spun
+off into a separate distribution as it solidifies and this documentation
+improves.
diff --git a/vim/doc/auto_swapdir.txt b/vim/doc/auto_swapdir.txt
new file mode 100644
index 00000000..f88cfcf3
--- /dev/null
+++ b/vim/doc/auto_swapdir.txt
@@ -0,0 +1,12 @@
+*auto_swapdir.txt* Automatically create 'swapdir' in 'realtimepath'
+
+Author: Tom Ryder <tom@sanctum.geek.nz>
+License: Same terms as Vim itself (see |license|)
+
+This plugin attempts to create a directory "swap" in the directory named by the
+first element of 'realtimepath', and enables 'swapfile' with that as the
+'directory' if it succeeds or if the directory already exists.
+
+This plugin lives in Tom Ryder's "dotfiles" suite, and will eventually be spun
+off into a separate distribution as it solidifies and this documentation
+improves.
diff --git a/vim/doc/auto_undodir.txt b/vim/doc/auto_undodir.txt
new file mode 100644
index 00000000..c782a70e
--- /dev/null
+++ b/vim/doc/auto_undodir.txt
@@ -0,0 +1,14 @@
+*auto_undodir.txt* Automatically create 'undodir' in 'realtimepath'
+
+Author: Tom Ryder <tom@sanctum.geek.nz>
+License: Same terms as Vim itself (see |license|)
+
+This plugin attempts to create a directory "undo" in the directory named by the
+first element of 'realtimepath', and enables 'undofile' with that as the
+'undodir' if it succeeds or if the directory already exists.
+
+It requires the +persistent_undo feature.
+
+This plugin lives in Tom Ryder's "dotfiles" suite, and will eventually be spun
+off into a separate distribution as it solidifies and this documentation
+improves.
diff --git a/vim/plugin/auto_backupdir.vim b/vim/plugin/auto_backupdir.vim
new file mode 100644
index 00000000..f15e7ce6
--- /dev/null
+++ b/vim/plugin/auto_backupdir.vim
@@ -0,0 +1,56 @@
+"
+" auto_backupdir.vim: Configure 'backupdir' automatically, including trying
+" hard to create it.
+"
+" Author: Tom Ryder <tom@sanctum.geek.nz>
+" License: Same as Vim itself
+"
+if exists('g:loaded_auto_backupdir')
+ \ || &compatible
+ finish
+endif
+let g:loaded_auto_backupdir = 1
+
+" Define the backup path we want
+if exists('$VIM_BACKUPDIR')
+ let s:backupdir = $VIM_BACKUPDIR
+else
+
+ " This is imperfect in that it will break if you have a backslashed comma in
+ " the first component of your &runtimepath, but if you're doing that, you
+ " probably already have way bigger problems
+ let s:backupdir
+ \ = strpart(&runtimepath, 0, stridx(&runtimepath, ','))
+ \ . '/backup'
+endif
+
+" If the prospective backup directory does not exist, try hard to create it
+if !isdirectory(expand(s:backupdir))
+
+ " Try Vim's native mkdir() first
+ if exists('*mkdir')
+ silent! call mkdir(expand(s:backupdir), 'p', 0700)
+
+ " Failing that, use an OS-dependent command
+ " (Fortunately, Unix and Windows are the only OS types in the world)
+ elseif has('unix')
+ silent! execute '!mkdir -m 0700 -p '
+ \ . shellescape(expand(s:backupdir))
+ elseif has('win32') || has('win64')
+ silent! execute '!mkdir '
+ \ . shellescape(expand(s:backupdir))
+ endif
+
+endif
+
+" If the directory exists after that...
+if isdirectory(expand(s:backupdir))
+
+ " Set the backup directory and turn backups on
+ execute 'set backupdir^=' . s:backupdir . '//'
+ set backup
+
+" If not, give up and raise an error
+else
+ echoerr 'Could not create backupdir ' . s:backupdir
+endif
diff --git a/vim/plugin/auto_swapdir.vim b/vim/plugin/auto_swapdir.vim
new file mode 100644
index 00000000..ea41a0f0
--- /dev/null
+++ b/vim/plugin/auto_swapdir.vim
@@ -0,0 +1,56 @@
+"
+" auto_swapdir.vim: Configure 'directory' automatically, including trying hard
+" to create it.
+"
+" Author: Tom Ryder <tom@sanctum.geek.nz>
+" License: Same as Vim itself
+"
+if exists('g:loaded_auto_swapdir')
+ \ || &compatible
+ finish
+endif
+let g:loaded_auto_swapdir = 1
+
+" Define the swap path we want
+if exists('$VIM_SWAPDIR')
+ let s:swapdir = $VIM_SWAPDIR
+else
+
+ " This is imperfect in that it will break if you have a backslashed comma in
+ " the first component of your &runtimepath, but if you're doing that, you
+ " probably already have way bigger problems
+ let s:swapdir
+ \ = strpart(&runtimepath, 0, stridx(&runtimepath, ','))
+ \ . '/swap'
+endif
+
+" If the prospective swapfile directory does not exist, try hard to create it
+if !isdirectory(expand(s:swapdir))
+
+ " Try Vim's native mkdir() first
+ if exists('*mkdir')
+ silent! call mkdir(expand(s:swapdir), 'p', 0700)
+
+ " Failing that, use an OS-dependent command
+ " (Fortunately, Unix and Windows are the only OS types in the world)
+ elseif has('unix')
+ silent! execute '!mkdir -m 0700 -p '
+ \ . shellescape(expand(s:swapdir))
+ elseif has('win32') || has('win64')
+ silent! execute '!mkdir '
+ \ . shellescape(expand(s:swapdir))
+ endif
+
+endif
+
+" If the directory exists after that...
+if isdirectory(expand(s:swapdir))
+
+ " Set the swapfile directory and turn swapfiles on
+ execute 'set directory^=' . s:swapdir . '//'
+ set swapfile
+
+" If not, give up and raise an error
+else
+ echoerr 'Could not create swapdir ' . s:swapdir
+endif
diff --git a/vim/plugin/auto_undodir.vim b/vim/plugin/auto_undodir.vim
new file mode 100644
index 00000000..1d20ba95
--- /dev/null
+++ b/vim/plugin/auto_undodir.vim
@@ -0,0 +1,57 @@
+"
+" auto_undodir.vim: Configure 'undodir' automatically, including trying hard
+" to create it.
+"
+" Author: Tom Ryder <tom@sanctum.geek.nz>
+" License: Same as Vim itself
+"
+if exists('g:loaded_auto_undodir')
+ \ || !has('persistent_undo')
+ \ || &compatible
+ finish
+endif
+let g:loaded_auto_undodir = 1
+
+" Define the undo path we want
+if exists('$VIM_UNDODIR')
+ let s:undodir = $VIM_UNDODIR
+else
+
+ " This is imperfect in that it will break if you have a backslashed comma in
+ " the first component of your &runtimepath, but if you're doing that, you
+ " probably already have way bigger problems
+ let s:undodir
+ \ = strpart(&runtimepath, 0, stridx(&runtimepath, ','))
+ \ . '/undo'
+endif
+
+" If the prospective undo directory does not exist, try hard to create it
+if !isdirectory(expand(s:undodir))
+
+ " Try Vim's native mkdir() first
+ if exists('*mkdir')
+ silent! call mkdir(expand(s:undodir), 'p', 0700)
+
+ " Failing that, use an OS-dependent command
+ " (Fortunately, Unix and Windows are the only OS types in the world)
+ elseif has('unix')
+ silent! execute '!mkdir -m 0700 -p '
+ \ . shellescape(expand(s:undodir))
+ elseif has('win32') || has('win64')
+ silent! execute '!mkdir '
+ \ . shellescape(expand(s:undodir))
+ endif
+
+endif
+
+" If the directory exists after that...
+if isdirectory(expand(s:undodir))
+
+ " Set the undo directory and turn persistent undo files on
+ execute 'set undodir^=' . s:undodir . '//'
+ set undofile
+
+" If not, give up and raise an error
+else
+ echoerr 'Could not create undodir ' . s:undodir
+endif
diff --git a/vim/plugin/big_file_options.vim b/vim/plugin/big_file_options.vim
index bbbedc96..cdced67d 100644
--- a/vim/plugin/big_file_options.vim
+++ b/vim/plugin/big_file_options.vim
@@ -44,7 +44,7 @@ function! s:BigFileOptions()
endif
" Limit the number of columns of syntax highlighting
- if exists('&synmaxcol')
+ if exists('+synmaxcol')
\ && &synmaxcol > g:big_file_synmaxcol
execute 'setlocal synmaxcol=' . g:big_file_synmaxcol
endif
diff --git a/vim/plugin/copy_linebreak.vim b/vim/plugin/copy_linebreak.vim
index 2b5f7243..732acfea 100644
--- a/vim/plugin/copy_linebreak.vim
+++ b/vim/plugin/copy_linebreak.vim
@@ -17,7 +17,7 @@ let g:loaded_copy_linebreak = 1
function! s:CopyLinebreakEnable()
setlocal nolinebreak linebreak?
setlocal showbreak=
- if exists('&breakindent')
+ if exists('+breakindent')
setlocal nobreakindent
endif
endfunction
@@ -26,7 +26,7 @@ endfunction
function! s:CopyLinebreakDisable()
setlocal linebreak linebreak?
setlocal showbreak<
- if exists('&breakindent')
+ if exists('+breakindent')
setlocal breakindent<
endif
endfunction