vim でターミナルにドキュメント パスを表示するにはどうすればよいでしょうか?

vim でターミナルにドキュメント パスを表示するにはどうすればよいでしょうか?

OS X 10.11では、Terminal.appに次のような形式の制御シーケンスを解釈する便利な機能が追加されました。

ESC ] 6 ; file://hostname/<path-as-URL> BEL

現在編集中または閲覧中の「文書」を指定するのに使用します。例として、

echo -e "\x1b]6;file://localhost/etc/passwd\a"

ターミナルのタイトルにファイル名が表示されpasswd、cmd キーを押しながらクリックするとパンくずリストが表示されます (OS X のほとんどのファイル エディタの「ドキュメント タイトル」の機能)。OS X のデフォルトでbashrcは、このシーケンスを使用して、現在の作業ディレクトリをウィンドウ タイトルに挿入しています。

Vim が新しいファイルを編集するたびにこの特定のエスケープ シーケンスを出力するようにするにはどうすればよいか (そして、理想的には、終了時やファイルの変更時など、編集が停止したらそれを設定解除する方法) を知りたいです。eglessやその他のプログラムの拡張機能も非常に役立ちます。

URL は技術的には適切に URL エンコードされている必要がありますが、そうでなくてもまったく問題ありません。通常、私は Vim で特に珍しいファイル名のファイルを編集することはありません。

答え1

Vim の通常の処理を放棄しても構わない場合はtitle、それをハイジャックできます。ターミナルに出力し、適切なシーケンスを発行するように調整できます。

set t_ts=^[]6;file://localhost
set t_fs=^G^M
set title
autocmd BufEnter * let &titlestring = expand("%:p")

control+vおよびを使用してesc、上記の制御文字のリテラル文字を取得します。シェル内の関数 around はvim設定を消去します ( VimLeave autocmd7.3 では動作しませんでした。また、if-you-suspend の問題もありますvim)。

function vim {
    command vim "$@"
    echo -ne "\033]6;\007"
}

:help title詳細については、 を参照するか、Vimファイル内のコードをtitle参照してください。src/term.c

関連情報