ウィンドウがフォーカスを失ったときにTmuxにVimに通知させることはできますか?

ウィンドウがフォーカスを失ったときにTmuxにVimに通知させることはできますか?

私はTmuxでVimとBashを並べて使います。私はファイルを切り替えるときにファイルを自動的に保存するようにVimを設定しましたが、Bashウィンドウに切り替えるときに自動的に保存したいと思います。

ウィンドウがフォーカスを失ったときにTmuxにVimに何らかのコードを送信させる方法はありますか?

答え1

これはおそらくvimクライアントサーバーモデルを使用するのが最善です。で使用するための良いガイドラインがあります:help remote.txt

まず、vimこのオプションでコンパイルされたクライアントが必要です+clientserver。ディストリビューションがこのようにパッケージ化されていない場合は、ソースコードを(、、apt-get sourceなどabsを介して)入手してこのオプションを追加してください。

tmuxこれが完了したら、ウィンドウを変更するときに、次のようにアクティブウィンドウに何かを送信できるようにキーを再バインドする必要があります。

vim --servername foo --remote-send '<C-\><C-N>:w<CR>'  

次のことが機能します(テストされていません)。

bind-key 0 run-shell "vim --servername foo --remote-send '<C-\><C-N>:w<CR>'" \; select-window -t :0

答え2

他の人はすでにvimプラグインでこれを行いました。https://github.com/sjl/vitality.vim

追加情報ファイルから:

(Vit)alityは、(V)imが(i)Term 2および(t)muxとうまく機能できるようにするプラグインです。

vimとtmuxを一緒に使用する場合は、次のことに興味があるかもしれません。ビドックスはめ込む。

デフォルトでは、RunVimTmuxCommandを呼び出すと、vimuxは現在のtmuxウィンドウの下に20%の高さの水平ウィンドウを作成し、vimのフォーカスを失うことなくその中でコマンドを実行します。ウィンドウが存在すると、RunVimTmuxCommandを再度呼び出すたびに、コマンドがウィンドウで実行されます。

テストを頻繁にやり直してください。

関連情報