有馬総一郎のブログ

(彼氏の事情)

2018年11月09日 22:46:23 JST - 1 minute read - Vim

Vimでファイルを開いた時、格納ディレクトリに移動する

開いたファイルと同じディレクトリに移動する。昔、テキトーにググって、 CD.vim : ファイルを開くと、そのファイルと同じディレクトリに移動 — 名無しのvim使いあたりだろうか、au BufEnter * execute ":lcd " . expand("%:p:h")を設定した。

そこから、どこで見付けたのか忘れけど、lcd substitute(expand("%:p:h")," ","\\\\ ","g")に書きかえた。

しかし、 NeovimVim8を使うようになって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