Vim でファイル保存時にディレクトリがなかったら作る
Vim で新規ファイルを作成する時、指定したサブディレクトリがないと保存できない。
# 「hoge/fuga/」ディレクトリが存在しないと保存できない
$ vim hoge/fuga/test.txt
その場でなんとかするなら
:!mkdir -p %:h
とシェルコマンドを打てばディレクトリが作れるのだが、%:h
あたりのイディオムを覚えられない。w
そこで、~/.vimrc
に次のような処理を組み込んでおくと、ファイル保存時、ディレクトリが存在しなければ作成するかどうか問うように操作できる。
" ファイル保存時にディレクトリがなかったら作成するか問う
augroup vimrc-auto-mkdir
autocmd!
autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
function! s:auto_mkdir(dir, force)
if !isdirectory(a:dir) && (a:force || input(printf('"%s" does not exist. Create? [y/N]', a:dir)) =~? '^y\%[es]$')
call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
endif
endfunction
augroup END
質問なしにディレクトリを自動的に作って保存してほしければ次の処理。
augroup vimrc-auto-mkdir
autocmd!
autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'))
function! s:auto_mkdir(dir)
if !isdirectory(a:dir)
call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
endif
endfunction
augroup END
コレを ~/.vimrc
に書いておくだけで良い。