私はgrep -e Peugeot -e PeuGeot carlist.txt
を使用してcarlist.txtを検索し、いくつかの項目を引き出しています。grep -e Peugeot -e PeuGeot carlist.txt | vi
がそれをパイプで通してくれると思いますが、これは私が得たものです。
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
「-」を引数としてviまたはvimを実行すると、編集するファイルが標準入力から読み取られます。したがって:
grep -e Peugeot -e PeuGeot carlist.txt | vi -
あなたが必要なことをします。
_vim -
_のほかに、<(command)
構文を使用してプロセス置換を使用することもできます。次に例を示します。
_vim <(echo This is example.)
vim <(cat /etc/hosts)
_
以下も参照してください。
output redirection を使用する必要があります:
grep ... > newfile.txt && vi newfile.txt
また、あなたのgrep
は改善できると思います:
grep 'Peu[gG]eot' carlist.txt > newfile.txt && vi newfile.txt
出力のリダイレクトも次のように使用できます。
vi <(grep ...)
複数のコマンド出力でさえ、別のファイルに保存されているかのようにリダイレクトできます。
vim -d <(ls) <(ls -a)
~/bin/r
:
#!/bin/sh
[ $# -eq 0 ] && set -- -;
exec vi -R "$@"
~/.vimrc
:
: au StdinReadPost * set buftype=nofile
次に:
ls |r
grep -e Peugeot -e PeuGeot carlist.txt | r
そして私は持っています
r- () { "$@" | r; }
私の~/.bashrc,
そう
r- ls -l
Vi(m)内またはvi(m)外のいずれかで、目的の操作を行うための効果的な方法が多数あります。
コマンドを実行し、(一時的な)ファイルを作成して、ファイルを編集します( Joseph R.の回答を参照 )
grep -e"Peu[gG]eot" carlist.txt && vi /tmp/peugeot.txt
コマンドを(バックグラウンドで)実行して一時ファイルを作成し、「:e!」を使用してファイルを編集します。生成されたファイルを更新するには(これは、ログファイルや、cronなどの別のプロセスによって生成されている他のファイルに役立ちます)、
grep -e "Peu[gG]eot" carlist.txt > /tmp/peugeot.txt &
vi /tmp/peugeot.txt
Vi(m)を実行し、子プロセスを実行して一時ファイルを作成し、それを読み取ります。
vi
:!grep -e "Peu[gG]eot" carlist.txt > /tmp/peugeot.txt
:r /tmp/peugeot.txt
または、ファイルに切り替えて、
:e /tmp/peugeot.txt
Vi(m)を実行し、ダブルバング「!!」を使用しますviに子コマンドを実行させ、結果を取得して現在の場所に挿入します(現在の行を上書きするため、空白行があることを確認してください)。
vi
i
here
empty
there
<esc>
kk
!!grep -e "Peu[gG]eot" carlist.txt
そして今、あなたは(あなたが望むなら)ファイルを任意のファイル名に書き込むことができます、
:w /tmp/someotherfilename.txt
そして Petr Uzelの答え も良いです、
grep -e "Peu[gG]eot" carlist.txt | vi -
Stdinから読み取る