vim を less とか more の代わりに使うと便利

こんにちは。

久しぶりに小ネタ書きます。

プログラマーの皆さんはコマンドライン(ターミナル)で作業されることも多いと思いますが、コマンドの結果が長くて1画面に収まらない場合どうしているでしょうか?

「スクロールしてターミナルの履歴を見る」でもよいですけど、ターミナルの設定によっては見たい結果がバッファに残ってなかったりしますよね。あと検索できないのが辛い。

なので less とか more というコマンドに渡して見る方法が一般的なのではないでしょうか?
less だと “/” を押せば検索もできますし。

しかしこの less なんですけど、なんとなく vim っぽい操作性でありながら vim ではありません。

そこでいっそのこと vim を less の代わりに使えばいいのではと思いついて、5年くらい前からやってますが、いい感じなので紹介です。

「そんなの普通にやっている」という方はスルーしていただけるとありがたいです。

確認した環境

Max OS X Yosemite 10.10.5

やり方

vim はファイル名として “-” (マイナス記号) を指定すると、標準入力を編集対象にできます。また、vim は “view” という別名を持っていて、この名前で起動するとリードオンリーモードになります。

この2つのオプションを使えば vim を less の代わりのページャーとして使えます。具体的には、

$ ls | view -

などのようにします。

こうすれば、検索はもちろん、vim の機能がすべて使えるのでいろいろ便利です。

使用例

例えば Cocos2d-x のソースファイルの一覧を見たい場合、

$ cd cocos2d-x-3.8
$ find . | view -

このようにします。すると結果は以下のような感じになります。

Screen Shot 2015-10-10 at 12.54.03 PM

14,787行もでました。

しかしここは vim ですので、あとは何でもできます。例えばこのなかに “SpriteBatchNode” を含む行だけを残したい場合

:%!grep SpriteBatchNode

などと打てば、(「リードオンリーですよ」って警告は無視)

Screen Shot 2015-10-10 at 12.57.23 PM

となりました。
クラス SpriteBathcNode に関連する C++, JavaScript, lua のファイルが6件あったってことですかね。

さらに例えばファイル名は不要で、ディレクトのリストにしたい場合は、ここから

:%s/[^/]*$//

とかやって、

Screen Shot 2015-10-10 at 1.03.39 PM

重複した行は

:%!uniq

などで消せるので

Screen Shot 2015-10-10 at 1.05.31 PM

こうなりました。
これでディレクトリのリストができました。自由自在です!

上記のように結果を編集してしまうと終了時に怒られるので、結果が不要な場合は

:q!

のようにします。

というわけで vim を less の代わりに使うのはおすすめです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です