• ベストアンサー

行削除のVIコマンド

viコマンドでご教授いただきたい事があります 「先頭が"hoge"から始まる行以外を全て削除する」 を実現する ”: ” から始まるコマンド文はありませんでしょうか? いろいろ組み合わせたら出来そうな気がするのですが、 私の思考能力では限界です。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

:v/^hoge/d 手元にVimしかないので、traditionalなviで使えるか不明ですが。

tyapio
質問者

お礼

お礼がおそくなって申し訳ございません。 私の環境viviでも使用ができました。 まさしく私の欲しかったコマンドでした。 ありがとうございました。

その他の回答 (4)

  • monda
  • ベストアンサー率87% (50/57)
回答No.5

すっかり間が空いてしまい失礼しました。 > 実はviviと呼ばれるvi機能付きWindowsのエディタを > 使用しております。 なるほど。 Windows に grep はありませんので、何かで代用したのですね。 現在のワタシの手元環境にあった、ならじょのにでさんご提供の UNIX LIKE TOOLS 中の egrep.exe で試してみました。 すると、先の記述のとおりでは ^ が正しく機能しませんでした。 しかし、egrep "^hoge" とマッチングパターンをダブルクォートで 括れば期待どおりに機能します(シングルクォートではダメ)。 この挙動はまさに COMMAND.COM(あるいはCMD.EXE)のものですね。 vi の中からやるならば、    :%!egrep.exe "^hoge" ですね。 ところで、何故に UNIX 以外の環境で vi を利用したいのでしょう? なまじ Windows の中で実行しようとせずに、どこかのコンピュータに Linux でも入れておいて samba 経由でファイルを受け渡し、Linux へ telnet(Windows 上の TeraTerm とか)で接続して編集すれば、 ほとんど悩むことなく利用できるはずです。 X さえ使わなければ、Windows で使えないような非力な PC でも Linux は動きます。 --

tyapio
質問者

お礼

monda様 ごぶさたしております。 tyapioです。 返事おそくなり、申し訳ございません。 >ところで、何故に UNIX 以外の環境で vi を利用したいのでしょう? >なまじ Windows の中で実行しようとせずに、どこかのコンピュータに >Linux でも入れておいて samba 経由でファイルを受け渡し、Linux へ >telnet(Windows 上の TeraTerm とか)で接続して編集すれば、 >ほとんど悩むことなく利用できるはずです。 簡単なコマンドも知らなかったくせに言うのもなんですが(^^;) viがすきだからです(愛) Windowsでのテキスト編集を全てviで行いたいので、 viviをいれてます ←わざわざ購入しました(TT) メール書く時にvi使えるのが特に嬉しいですね。 メーラーのエディタ使いにくくないですか?

  • monda
  • ベストアンサー率87% (50/57)
回答No.4

> しかし、このコマンドでは行の途中にhogeがある行も残ってしまいました。 ? hoge の前に ^ を付けて実行していますよねぇ。 #余計な解説かも知れませんが、^ は「行頭」の意。 これが「ズル」なのは、! で親シェルを呼び出して そこから grep を使っているからです。 つまり vi だけの機能ではない、と。 期待した結果にならないということは、親シェルは ^ を解釈してくれない =(/bin/shや/bin/cshおよび その眷属ではない)という環境でしょうか? --

tyapio
質問者

お礼

追っての解説、誠にありがとうございました。 monda様の仰るとおりです。 実はviviと呼ばれるvi機能付きWindowsのエディタを 使用しております。 余り詳しくはないのですが、親シェルが「^」を解釈してくれない気がします。 #Windowsも親シェルってあるのかは解りませんが(^^;)

  • monda
  • ベストアンサー率87% (50/57)
回答No.3

ちょっとズルして :%!grep ^hoge ってのはいかが?

tyapio
質問者

お礼

ありがとうございます。 しかし、このコマンドでは行の途中にhogeがある行も残ってしまいました。

  • joe-
  • ベストアンサー率34% (11/32)
回答No.1

全然スマートじゃないですが、、、 :%s/^[^h][^o][^g][^e].*$//g とかはどうですか?

tyapio
質問者

お礼

ありがとうございます。 欲しいコマンドではありませんでしたが、 大変勉強になりました。

関連するQ&A