アカウント取っといて使わないのもなんだし書いてみる。
目的
Agitやfugitiveなどを利用する際、シンボリックリンクとそうでないファイルの違いを意識せずに扱いたい。
元ファイルのパスを取得する方法は以下に書いてあった(パスを再設定するコマンドを定義している)。
Vimでシンボリックを辿る - たけっぱ横丁
だがぶっちゃけ面倒なのでバッファを開いた時にcd再設定してくれるautocmdを書いた。
スクリプト
.vimrc
au BufEnter * execute findfile(expand('%')) != "" && resolve(expand('%:p')) != getcwd().'/'.expand('%') ? ":FollowSymlink" : ""
command! FollowSymlink call s:SwitchToActualFile()
function! s:SwitchToActualFile()
let l:fname = resolve(expand('%:p'))
let l:pos = getpos('.')
let l:bufname = bufname('%')
enew
exec 'bw '. l:bufname
exec "e" . fname
call setpos('.', pos)
endfunction
真面目にスクリプトを書いたの初めてなんでおかしな所があるかもしれない。
あとどのバッファを読んでもこのautocmd走るからレスポンスがどうのはあるかもなので気になったらまた改良しようと思う。