このブログを検索

2007/12/03

viで大量の行を移動する

viで、大量の行をカット&copyして移動するのが面倒である。

 100,200 copy 300

 というようにすると100-200行目を300行目に挿入してくれるということはわかったのだが、
その3つの数値を記憶しなければならない。

copy開始の行にカーソルを合わせてCtrl+Gを押し行番号を記憶、終了の行番号を同様にして記憶、そしてターゲットの行番号を確認してコマンドを実行する。

グラフィカルにこっからここまでをコピーしてここにペタリ、という操作ができない。多分なんかいい方法があるのだと思うんだけど・・・ 


さすがvi。いろいろ方法があったが、簡単なのは以下の方法。 

V を入力してカット範囲を選択すると反転する。

目的の範囲が定まったら : を打つと :'<,'>と表示される。

そこにya a と続けると、反転した範囲が a というバッファにコピー(yank)される。

そして貼り付けたい場所にカーソルを持っていって、"apとすれば張り付く。

行番号を一切知る必要がない。

ちなみに私はviとvimについてのみ書かれた1500円する本を一冊持っている。あんまり見ないけど。

それから私の使っているviはvimだった。

Redhat9のは6.1, cygwinのは7.0。 

私は家でも仕事でもメインのPCはWindows,仕事場はXP、家ではvistaである。

テキストエディタは秀丸を使っている。Wordを使う事はまずない。

大きなファイルをフィルタリングするような必要がある場合は、秀丸の正規表現を使った置換が使えればそれでやる。これでだいたいできる。

できない場合は、cygwinでgrepコマンドを使う。たとえば PassedまたはFailedと書いてある行のみを抜き出したい場合。

 cat aaa.log|grep -e Passed -e Failed>new.log

秀丸でもできるのかもしれないが私は最近覚えたこの方法を使う。 

viは、cygwinで使うファイルを開く時とか、メイン以外のlinuxにログインしたときなどに、仕方なく使う。大幅に編集する必要がある場合はメインのPCに持ってきて秀丸で編集している。

しかし最近はviに慣れてきて、秀丸と大差ない機能があることがわかってきた。むしろ、正規表現を使った検索や置換はviというかunixの世界が元祖である。