分割ペインでシェルコマンドの出力を開く


23

解釈されたプログラミング言語を検討してください。

現在開いているスクリプトを! interpreter %を使用して実行し、実行が終了した後にリターンキーを使用してvimに戻ることができます。

現在のウィンドウを実行されたシェルコマンドの出力で置き換えずに、代わりに新しい分割ペインで出力を開くことは可能ですか?スクリプトの実行中にソースコードを見たいと思います。

試しました:split ! interpreter %が、うまくいきませんでした。

方法はありますか?vim 7.3を使用しています。

回答:


29

を使用する:!と、外部コマンドはシェルで実行され、一時的な出力はVim内にキャプチャされません。端末に何が印刷されるかを見るだけで、外部コマンドが終了するとVimに制御が戻ります。

出力を保持するには、Vim バッファーに読み込む必要があります。そのために、:read!コマンドがあります。新しいスクラッチバッファーを開くには、これを:new次と組み合わせます。

:new | 0read ! <command>

現在のバッファーのファイル名(%)を外部コマンドに渡したい場合、を使用:executeして、現在のバッファーで既に評価されているようにする必要があります。

:execute 'new | 0read ! interpreter' expand('%')

または、新しいバッファーでは、前のバッファーが代替バッファーになるという事実を使用し、#代わりに使用します%

:new | 0read ! interpreter #

でスクラッチバッファを取り除き:bdelete!ます。

実行中に出力を非同期で表示する場合は、@ chaos answerで説明されているように、外部マルチプレクサまたはプラグインが必要です。


上記の「:execute ...」コマンドは機能しますが、この.vimrcエントリを使用してF9キーストロークにバインドしようとすると[nnoremap <buffer> <F9>:execute 'new | 0read!/ usr / bin / env python3 'expand('% ')]、次のエラーが表示されます:[/ bin / bash:-c:line 0:一致する `' 'expand('% 'を検索中に予期しないEOF )]。いくつかのエスケープシーケンスを試しましたが、正しいシーケンスではないと思います。= :)。何か案は?ありがとうございました。
NYCeyes

2

私の知る限り、あなたはそれを行うことはできませんvim。しかしscreen、そのような端末マルチプレクサを使用してください。vimを開く前に、マルチプレクサを開始します。

screen

次にctrl- a Sを押します- 水平方向とctrl- a |垂直方向の画面がこぼれます。

vim分割画面の1つでファイルを開きます。ctrl- を使用して他の画面にジャンプしますa tab。2番目の画面では、使用する前にまず新しい画面(ctrl- a c)を開く必要があることに注意してください。

vimのある画面ではファイルを編集でき、もう1つの画面ではファイルを実行してメッセージとコードを永続的に表示できます。

ここに、クイックリファレンスがありscreenます。


または、tmuxマルチプレクサとvim-dispatchプラグインを使用して、ペイン間の分割とジャンプを自動化できます。
テイクツー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.