aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin/auto_undodir.vim
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-11-11 01:07:14 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-11-11 01:07:14 +1300
commitaaf04871d944646225875d5e9cc31a967947c3fe (patch)
tree787efb73dabb6b9cda660ccde51e838b507a3dbd /vim/plugin/auto_undodir.vim
parentMerge branch 'hotfix/v0.12.2' (diff)
parentBump version number to 0.13.0 (diff)
downloaddotfiles-0.13.0.tar.gz (sig)
dotfiles-0.13.0.zip
Merge branch 'release/v0.13.0'v0.13.0
* release/v0.13.0: (30 commits) Bump version number to 0.13.0 Move mutt_mail.vim line select logic into plugin Add new mail_mutt.vim plugin, apply mappings Sort 'shortmess' flag settings alphabetically Add 'o' and 'O' back into 'shortmess' Set up individual flags for 'shortmess' Fix oii(1df) so it works as a pipe 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 ...
Diffstat (limited to 'vim/plugin/auto_undodir.vim')
-rw-r--r--vim/plugin/auto_undodir.vim57
1 files changed, 57 insertions, 0 deletions
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