diff options
authorTom Ryder <tom@sanctum.geek.nz>2019-06-01 18:11:52 +1200
committerTom Ryder <tom@sanctum.geek.nz>2019-06-01 18:11:52 +1200
commit336d46e800cfa51b5923ca7263c2eedd5b4c7cfb (patch)
parentMerge branch 'hotfix/v1.1.2' (diff)
parentBump VERSION (diff)
Merge branch 'release/v2.0.0'v2.0.0
* release/v2.0.0: Wrap and quote attribution in README and :help doc Throw away the path absolution hooks
5 files changed, 13 insertions, 55 deletions
diff --git a/README.md b/README.md
index 20032ed..e93b5bd 100644
--- a/README.md
+++ b/README.md
@@ -10,10 +10,13 @@ confirm that Vim should create any missing path elements.
On `:write!` or `:w!`, the path will be created automatically, ignoring the
value of `'confirm'`.
+Inspired by Damian Conway's [`automkdir.vim` plugin][1].
-Copyright (c) [Tom Ryder][1]. Distributed under the same terms as Vim itself.
+Copyright (c) [Tom Ryder][2]. Distributed under the same terms as Vim itself.
See `:help license`.
-[1]: https://sanctum.geek.nz/
+[1]: https://github.com/thoughtstream/Damian-Conway-s-Vim-Setup/blob/cbe1fb5/plugin/automkdir.vim
+[2]: https://sanctum.geek.nz/
diff --git a/VERSION b/VERSION
index 45a1b3f..227cea2 100644
@@ -1 +1 @@
diff --git a/autoload/write_mkpath.vim b/autoload/write_mkpath.vim
index 6c55e78..8a3ac9d 100644
--- a/autoload/write_mkpath.vim
+++ b/autoload/write_mkpath.vim
@@ -1,35 +1,6 @@
-" Handle a buffer created for a new file; anchor its filename to be absolute
-" if it's relative and the directory path doesn't yet exist; this stops Vim
-" trying to save in the wrong place if the user changes directory before
-" writing the buffer
-function! write_mkpath#New(path) abort
- " We don't have fnameescape(); this old Vim < v7.1.299 is likely too buggy
- " to handle the buffer renaming for paths safely, so better not to mess with
- " it and instead to stick with suboptimal but consistent behaviour
- if !exists('*fnameescape')
- return
- endif
- " Path exists, or is absolute; we don't need to do anything
- if isdirectory(fnamemodify(a:path, ':h'))
- \ || s:Absolute(a:path)
- return
- endif
- " Set filename to absolute path using :file {name}; do it silently so that
- " the nice name remains displayed to the user. Record the name of the
- " alternate buffer first, so we can put it back after :file messes with it.
- execute 'silent file '.fnameescape(getcwd().'/'.a:path)
- " Wipe the unlisted alternate buffer that :file leaves behind
- bwipe #
" Handle a :write operation; prompt for directory creation if needed with
" 'confirm', force it with :write!
-function! write_mkpath#Write(path) abort
+function! write_mkpath#(path) abort
" Get all directory elements leading up to directory
let dir = fnamemodify(a:path, ':h')
@@ -56,14 +27,3 @@ function! write_mkpath#Write(path) abort
-" Clumsy and probably wrong helper function to check if a path is absolute
-function! s:Absolute(path) abort
- if has('unix')
- return a:path =~# '^/' " Leading slash on Unix
- elseif has('win32') || has('win64')
- return a:path =~# '^\u:' " e.g. C: -- I'm not sure this is right
- else
- echoerr 'Unrecognised operating system'
- endif
diff --git a/doc/write_mkpath.txt b/doc/write_mkpath.txt
index 3416629..76823d9 100644
--- a/doc/write_mkpath.txt
+++ b/doc/write_mkpath.txt
@@ -20,17 +20,14 @@ This plugin only loads if 'compatible' is not set.
CAVEATS *write_mkpath-caveats*
-In Vim 7.0 and 7.1, the path will be created relative to Vim's working
-directory at the time of the write operation, which might not be the same as
-the working directory when the buffer was first created, e.g. after a |:cd|
-change. This is worked around safely in Vim 7.2 and newer by calculating an
-absolute path for new buffers with nonexistent relative paths, but filename
-escaping bugs in earlier versions preclude the same fix in older versions.
+The path will be created relative to Vim's working directory at the time of
+the write operation, which might not be the same as the working directory when
+the buffer was first created, e.g. after a |:cd| change.
AUTHOR *write_mkpath-author*
-Written and maintained by Tom Ryder <tom@sanctum.geek.nz>.
-Inspired by Damian Conway's automkdir.vim plugin:
+Written and maintained by Tom Ryder <tom@sanctum.geek.nz>. Inspired by Damian
+Conway's `automkdir.vim` plugin:
LICENSE *write_mkpath-license*
diff --git a/plugin/write_mkpath.vim b/plugin/write_mkpath.vim
index c7c9543..ea53191 100644
--- a/plugin/write_mkpath.vim
+++ b/plugin/write_mkpath.vim
@@ -12,8 +12,6 @@ endif
" Check path to every file before it's saved
augroup write_mkpath
- autocmd BufNewFile *
- \ call write_mkpath#New(expand('<afile>'))
autocmd BufWritePre *
- \ call write_mkpath#Write(expand('<afile>'))
+ \ call write_mkpath#(expand('<afile>'))
augroup END