blob: cba56e975a85bad40a835f162e3dd9f1fb8c1085 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
" Handle a :write operation; prompt for directory creation if needed with
" 'confirm', force it with :write!
function! write_mkpath#(path) abort
" Get all directory elements leading up to directory
let dir = fnamemodify(a:path, ':h')
" Directory exists, we don't need to do anything
if isdirectory(dir)
return
endif
" If :write! was issued, we'll try to create the missing path; failing that,
" if 'confirm' is enabled, and the user responds affirmatively to the
" prompt, that will do, too. Otherwise, we will allow the write to fail.
if v:cmdbang
let mkpath = 1
elseif &confirm
let mkpath = confirm('Create path '.dir.'?', "&Yes\n&No") == 1
else
let mkpath = 0
endif
" If we decided to attempt a path creation, do so
if mkpath
call mkdir(dir, 'p')
endif
" Prod Vim into realising the buffer's directory exists now, so that a
" subsequent change of working directory doesn't break it
silent keepalt file %
endfunction
|