TmuxにvimとLynxを使用して分割ウィンドウを設定しています。作業中のスクリプトを保存し、フォーカスをLynxペインに切り替え、Lynxページを更新してから、vimペインに戻るカスタムコマンドをvimに送信できるように、スクリプトを作成しようとしています。
これを行う既存のスクリプトはありますか?そうでない場合、このスクリプトを作成するための最良のアプローチは何でしょうか?
おそらくVimを使用することができます :!
コマンドを実行してtmux send-keys
を実行し、Control-Rを送信します† 他のペインに。 send-keys
は(アクティブなペインだけでなく)任意のペインにキーストロークを送信できるため、アクティブなペインを前後に切り替える必要もありません。
これがVimマッピングです(.vimrc
に入れるか、:
プロンプトに貼り付けて試してみてください):
:map <Leader>rl :w<Bar>execute 'silent !tmux send-keys -t bottom C-r'<Bar>redraw!<C-M>
これにより、\rl
キーシーケンス( <Leader>
デフォルトは\
になりますが、カスタマイズできます)は、次のVimコマンドシーケンス(<Bar>
で区切られます。 :help map_bar
を参照)にマップされます。
execute
を使用して、次のVimコマンド(redraw
)が:!
Shellコマンドの一部として使用されないようにします。silent
prefixコマンドを使用して、「Enterキーを押して続行」というプロンプトを回避します。:!
コマンドの出力を表示する場合は、slient
を省略できます(例:tmuxコマンドが機能しない、エラーメッセージが表示されているかどうかを確認します)。silent
で抑制しています。† 手元にlynxがありませんが、「lynxreload」の検索に基づくとControl-Rがリロードキーのようです(つまり 「ファイルの再読み込みと表示の更新」 ユーザーガイドの)。
‡bottom
の他に、ターゲットペインを指定する方法が他にもあります( tmuxマニュアルページで「target-pane」を検索してください )::
.+1
、.-1
:このウィンドウの次の前のペインtop
、bottom
、left
、right
、およびtop
/bottom
とleft
/right
の組み合わせbottom-left
)%42
(tmux1.5+):ターゲットペインのTMUX_PANE環境変数からの%
-プレフィックス付きペイン番号
この最後のフォームは、LynxペインがVimのインスタンスと常に同じtmuxウィンドウにあるとは限らない場合に便利です。 Lynxを起動する前に、TMUX_PANEの値を一時ファイルに保存し、ファイルを読み取ってターゲットペイン引数を形成します。
# before running Lynx (anytime really, but "before" is usually scriptable)
echo "$TMUX_PANE" > /tmp/my-lynx-pane
# in the Vim :! command in the mapping:
tmux send-keys -t "$(cat /tmp/my-lynx-pane)" C-r
手動で選択したtmuxセッションと対話し、それにバッファーを送信するtslime.vimプラグインから始める必要があります。ほぼ同じプラグインを作成することになります。ただし、バッファを送信する代わりに、コマンドを発行します(man 1 tmuxを参照)。