Unixパイプライン内でvimを使用するにはどうすればよいですか?
Aug 20 2020
次の呼び出しを使用して、vim / exを使用してファイルをgrepできます。
ex -c'g/foo/p' -cq -s afile.txt
同様のコマンドを使用して、stdinからいくつかのテキストをgrepしたいと思います。次のコマンドは機能するはずだと思いましたが、出力が生成されません。
cat afile.txt | ex -c'g/foo/p' -cq -s -
vim -e
代わりに使用した場合も同じことが起こりますex
:
cat test.md | vim -e -c'g/foo/p' -cq -s -
exに初期バッファをstdinから読み取り、出力をstdoutに出力して、Unixパイプライン内で使用できるようにする方法はありますか?
回答
4 user938271 Aug 21 2020 at 02:34
特別なファイル名を-
前に移動します-e
:
cat test.md | vim -e -c'g/foo/p' -cq -s -
^
✘
cat test.md | vim - -e -c'g/foo/p' -cq -s
^
✔
の前に-e
、-
リテラルテキストとして読み取られます。の後-e
、-
Exコマンドとして読み取られます。
Vim: Reading from stdin...
警告を抑制するには--not-a-term
、vim(1)
次のコマンドに引数を渡します。
cat test.md | vim - -e -c'g/foo/p' -cq -s --not-a-term
^----------^
Vimを終了する:qa!
には、次の代わりに実行します:q
。
cat test.md | vim - -e -c'g/foo/p' +'qa!' -s --not-a-term
^-^
あなたは参加することができます-e
と-s
、あなたは置き換えることができ-c
て+
:
cat test.md | vim - -es +'g/foo/p' +'qa!' --not-a-term
^ ^
これで、Vimの出力を別のシェルユーティリティに渡すことができるはずです。例wc(1)
:
cat test.md | vim - -es +'g/foo/p' +'qa!' --not-a-term | wc -l
^-----^
参照:
- vims
- パイプラインフィルタリング用のVim
- Vimの社会生活
- 私のノート