augroup BWCCreateDir
autocmd!
autocmd BufWritePre * if expand("<afile>")!~#'^\w\+:/' && !isdirectory(expand("%:h")) | execute "silent! !mkdir -p ".shellescape(expand('%:h'), 1) | redraw! | endif
augroup END
조건을 참고 : expand("<afile>")!~#'^\w\+:/'
같은 파일에 대한 디렉토리를 만들 수 정력을 방지 ftp://*
하고 !isdirectory
비싼 MKDIR 호출을 방지 할 수 있습니다.
업데이트 : 비어 있지 않은 buftype을 확인하고 사용하는 약간 더 나은 솔루션 mkdir()
:
function s:MkNonExDir(file, buf)
if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/'
let dir=fnamemodify(a:file, ':h')
if !isdirectory(dir)
call mkdir(dir, 'p')
endif
endif
endfunction
augroup BWCCreateDir
autocmd!
autocmd BufWritePre * :call s:MkNonExDir(expand('<afile>'), +expand('<abuf>'))
augroup END
mkdir -p %:h
중첩 된 존재하지 않는 경로에 대해 작동하고 경로가 이미있을 때 오류를 발생시키지 않으며%:h
현재 파일의 전체 경로 이기 때문에 더 좋습니다 . 그러나 이것을 자동으로 호출하는 방법을 모릅니다. 일반적으로 이것은 automcommands로 수행되지만BufWritePre
이벤트는 여기서 작동하지 않는 것 같습니다.