2009年4月12日日曜日

ページャとしてのview

UNIX系コマンドは結果を標準出力に出力するのが一般的だ。その出力量が端末の画面範囲を越えた場合パイプ経由でページャを使用することが多いだろう。
そこで皆さんはページャに何をお使いだろうか? more?less?lv?私は当然viewです!
それには単にVimerだからという以外にちゃんとした理由がある。

moreやlessやlvはページャなのでデフォルトで標準入力からの入力に対応してるが、Vimでは「-」というオプション(これはtarのと同じ)と共に起動すれば可能。
$ ps ax | view -


で、なぜVimかだが、今まで(+これから)紹介してきた機能が使えるからだ!
more等他のページャとエディタであるVimが決定的に異なるのは、カーソルという概念があるか否かである。
Vimの特徴であるカーソル下の単語に対しての検索やファイル・オープンが使えると、マウスの出番は廻って来ずに済む。


「*」の場合

例えば、マルチプロセスなプログラムのシステムコールをトレースした場合、ここで紹介した*」検索を使えば、同じPIDを追いたい時に先頭のPID上で「*」を押せば素早く追える。
*」が単語を表す正規表現を含んでいたことを思い出せば、ディスクリプ番号のみの検索も容易である。
$ strace -fF multi_process 2>&1 | view -
straceの場合はカラー表示にもなる!

また、objdump等でアドレスを追っていく場合でも「g*」で簡単に追える。
$ objdump -d my_prog | view -
更に関数名からtagジャンプもできる!



「gf」の場合

極めつけは、grepとの連携!
grepでソースコードやスクリプト、設定ファイル等を検索する場合、検索結果をVimで受けることで幸せになれる。

前回紹介したように「gf」とすれば、カーソル下のファイルが開けるのであった。そしてgrep結果の先頭にはファイルパスが! そう、検索結果から該当ファイルにジャンプできるのだ。
$ grep -nr pthread_ * | view -
再帰検索でも相対パスで表示されるので問題なく開ける。

だだし、上記「gf」だとファイルはオープンできるが、grepが出力する行番号にまでは跳んでくれない。
そこで、「gf」の代わりに「gF」を使うと、今度はちゃんと該当行にまで跳んでくれるようになる!

なお、標準入力から「view -」で受け取りファイルにジャンプ後「Ctrl-O」で検索結果に戻ろうとしても空ファイルになってしまう。これを回避したい場合は「:set hidden」な状態にしておけばOK!

さらに、開いたファイルの上でタグジャンプ等の移動コマンドを多用する場合など移動履歴のスタックが増え最初の検索結果に戻るのが大変になりそうな時は「Ctrl-W gF」で新規タブとして開いてから跳んでいくとよい。



0 件のコメント:

コメントを投稿