web-dev-qa-db-ja.com

vimからビルドコマンドを実行し、出力を別のtmuxペインに送信しますか?

開発IDEとしてtmuxおよびVimを使用しています。私はtmuxで3つのペインを開いています。1つはソースコードの編集用、もう1つはデバッグ用、もう1つはディスプレイコンソール用です。

Vimからmakeコマンドを実行し、それによって生成されたすべてのビルド情報をディスプレイコンソールペインに送信します。どうすればいいですか?

4
SLN

1つのペインから任意のシェルコマンドを実行し、run-Shellコマンドを使用して、その出力を別のペインに表示できます。例えば:

tmux run-Shell -t 2 "echo hello"

...そして「hello」がペイン番号2に出力されます。prefix + qでペイン番号を確認できます。

vimから、次のことができるはずです。

:!tmux run-Shell -t 2 "make ..."

-bを追加して、コマンドをバックグラウンドで実行します。

更新:@SLNがもたらしたいくつかの問題に対処 このコメント ...

  • tmuxは、出力ペインをcopy-modeに配置します。これは、スクロールを実行するときと同じモードであるため、通常の方法でそれを中断します(Ctrl+C 片道です)。注:ペインの右上隅に[12/34](つまり、page-num/total-pages)のようなものが表示されていれば、このモードにいることがわかります。
  • ヒットする必要があるVimについては Enter (または Ctrl+Lmakeまたはその他のコマンドが完了した後、これはVimが外部コマンド(:!cmd)を処理する方法です。私はこれを回避する方法を知りませんが、あなたが打つことができると思います Enter コマンドが完了する前に、コマンドが完了するとすぐに戻ります。 (これはシステムに依存する場合があります。)

更新2:2番目のアイテムの回避策を知っています。マッピングを使用して外部コマンドを実行する場合は、終了キーを埋め込むことができます。これが、シェルコマンドとしてlsを実行している例です。

nnoremap <leader>ls :!ls<CR><C-L>

通常モードから\lsを押すとlsコマンドが実行されますが、コンソール出力が閉じてすぐにvimに戻ります。おそらく、コマンドが何であれ、これに適応できます。

3
B Layer

事前にファイルをタッチできます&tail -f file:1つのペインにあります...そのため、vim内でそのファイルへの出力のリダイレクトを使用してmakeを起動すると、makeセッションが表示されます....

0
francois P