6

そのため、最近 Apple は、ターミナルのステータス バーに作業ディレクトリとファイルを表示するためのサポートを含めました。(現在のファイルを設定するために) 送信する必要があるエスケープ シーケンスは次のとおりです。

ESC ] 6 ; Pt BEL

wherePtは、file://現在編集中のファイルを指す URL です。それで、Vim にこのコマンドをエスケープ シーケンスとして送信させることができると考えましたが、少し問題があります。私はこれまでのところこれを持っています:

au BufNewFile,BufReadPost,BufFilePost,BufWritePost * echo <escape sequence>

しかし、私はそれがそのようにうまく機能しないと感じています。また、現在のファイルをfile://URL として取得する方法もわかりませんが、netrw が役立つのではないかと思います。何か案は?

編集

これまでのところ、私はこれを持っています:

au BufNewFile,BufReadPost,BufFilePost * echo printf('\e]6;file://%s%s\a', $HOSTNAME, expand('%:p'))

しかし、まだ機能していません-$HOSTNAME拡張されていません。これを拡張する方法についてのヒントはありますか?

編集 2

わかりましたので、引用符と exports にいくつかの変更を加えました$HOSTNAME。これで、これは正常に印刷されます。しかし、エスケープ シーケンスを文字通りエコーする代わりに、vim はそれらを のよう^[に出力しているため、役に立たなくなります! そして、ここで私の本当の質問が来ます.vimにリテラルエスケープシーケンスをシェルに送信させるにはどうすればよいですか?

成功!

最終的なコードは次のとおりです。

set title
set t_ts=^[]6;
set t_fs=^G
auto BufEnter * let &titlestring = "file://" . hostname() . expand("%:p")
4

1 に答える 1

3

!echo -ne <ESCAPE SEQUENCE>vim内で使用できます。変数を含むタイトル文字列で使用するには、executeプレフィックスを付けることができます。

execute "silent !echo -ne " . EXPRESSION

しかし、正直なところ、独自のコマンドをロールする必要はありません。代わりに、ここで説明されているように、これら 2 つの変数を操作できます。

't_ts' および 't_fs' オプションは、端末が文字列の送信によるタイトル設定を許可している場合、ウィンドウ タイトルを設定するために使用されます。これらは、それぞれタイトル文字列の前後に送信されます。同様の 't_IS' と 't_IE' を使用して、アイコン テキストを設定します。これらは Unix termcap の Vim 内部拡張であるため、外部 termcap から取得することはできません。ただし、組み込みの termcap には xterm と iris-ansi に適したエントリが含まれているため、ここで設定する必要はありません。

于 2015-11-16T12:41:06.100 に答える