2

別のコマンドにパイプする前に編集したい出力を提供するシェル コマンドがあります。これは、簡単に編集できる通常の出力sedなどではありません。私の現在のアプローチは次のとおりです。

command-one > tmp
vim tmp
command-two < tmp
rm tmp

一時ファイルの不必要な作成を避け、代わりに次のようなことをしたいのですcommand-one | vim - | command-twoが、vimの実際の画面上の出力が編集できるように表示されるのではなく、コマンドにパイプされるため、うまくいきません。git commitこれは、結果を使用する前に一時ファイルが書き込まれるのを待つようなコマンドで機能します。

4

5 に答える 5

3

あなたが指摘したように、エディターがユーザーにあるものを表示し、stdout に別のものを出力する必要があるようなパイプラインに適合するため、これは述べたように困難です。

ただし、パイプラインの残りの部分が長すぎたり、ひどくなかったりしない場合は、vim を使用して次のことができます。

$ vim <(first | part | of | pipeline)

これは、それらのコマンドの stdout を出力する名前付きパイプである引数を vim に渡します。効果的な結果は、その出力を含むバッファーを取得することです。それを編集して、終了する前に:

:w !rest | of | pipeline

これはrest | of | pipelineシェルで実行され、現在のバッファーを標準入力にフィードします。vim 内でコマンドの出力が表示:q!され、変更されたバッファを破棄してシェルに戻ることができます。

于 2014-07-18T11:50:37.930 に答える
2

この目的のために設計されたvipe ( https://linux.die.net/man/1/vipe ) というツールがあります。

command | vipe | another-command
于 2020-08-04T10:59:20.763 に答える