開いたファイルと同じディレクトリに移動する。昔、テキトーにググって、
CD.vim : ファイルを開くと、そのファイルと同じディレクトリに移動 — 名無しのvim使いあたりだろうか、au BufEnter * execute ":lcd " . expand("%:p:h")
を設定した。
そこから、どこで見付けたのか忘れけど、lcd substitute(expand("%:p:h")," ","\\\\ ","g")
に書きかえた。
しかし、 Neovimや Vim8を使うようになってterminal
コマンドを使うとエラーが吐くようになった。初めは、何でだろうかと思ったけど、何てことはない、terminal
や実体の持たないバッファを開く時も、ディレクトリ移動しようとしてエラーになっているだけだった。
だから、移動先がディレクトリか確認するようにした。そして、最近、 fnameescape()は使うな - 永遠に未完成を読んだので、それを参考に修正した。
function! s:ChangeCurrentDirectory()
let l:dir = expand("%:p:h")
if isdirectory(fnamemodify(l:dir, ":p"))
execute printf('lcd `=%s`', string(fnamemodify(l:dir, ":p")))
endif
endfunction
autocmd BufEnter * call s:ChangeCurrentDirectory()
Windowsでは以下のディレクトリでも問題なく遷移
C:/Users/arimasou16/Documents/!dd.%%# ..~##$ .d!/d.txt
Ubuntuでは以下のディレクトリでも問題なく遷移できることを確認した。
/home/arimasou16/Documents/dd d##$#~~~..@@3^%&*()_! !/test.txt