諸事情ありまして、少々お休みを頂戴しておりました。読者の方からは暖かい励ましの言葉を戴き、恐縮至極です。その代わりといってはナニですが……今さらながらブログを始めてみました。なにやらペタペタ貼りつけていて賑やかですが、そこはほら、ご愛敬というヤツで (笑)。当コラム同様、ご愛顧のほどを。
さて、今回は「less」について。長年UNIX系OSに親しんでいるユーザにとっては、なにを今さらという話題だが、ここ数年でOS Xを使い始めたユーザにとっては、「lessはページャなり」などという説明は意味をなさない。ちょうどいい機会なので、何故にlessが必要とされるのかを解説しつつ、Yet Anotherな使い方を提示してみたい。
いまあえて知る「less」の存在価値
それでも、やはり、less最大の存在価値は「ページャ」としての機能にある。ここでは、UNIX系OSにあまり馴染みのない読者向けに、その使い方とありがたさを解説してみよう。
1つは、コマンドの出力結果の受け皿として。当コラムの読者であれば、「ls」コマンドで大量のファイルリストが表示され画面がスクロールしてしまう状況は容易に想像できるはず。一方、これをTerminal右横のスクロールバーで操作するのが"野暮"なことも理解できることと思う。lsなど大量のテキストを出力するコマンドを使うとき、lessにパイプすれば (ex. ls -l | less) 、あとから表1の機能でじっくりとスクロールさせずに読むことができるのだ。
もう1つが、テキストファイルビューアとして。ソースコードをビルドする手順を調べたいとき、「README」や「INSTALL」といったテキストファイルに目を通すことになると思うが、これをダブルクリックしてTextEditで読むのはかなり野暮だ。こういった場合は、lessの引数にファイル名を与え (ex. less README)、lessの機能でファイルを閲覧すればいい。ただし、日本語を含むファイルは、エンコードの問題があるためOS Xデフォルトの状態では読めないことが多いため、別途下準備が必要になる。
文字列の検索にも使える。たとえば、ディレクトリ内の詳細なファイルリストをlessで表示 (ls -l | less) したとき、「/Mac[Enter]」と入力すれば、「Mac」の文字を含む行、すなわちファイル名にMacを含む行が強調表示されカーソルが移動する。次の候補へ移動するときは「n」、Spotlightよりも迅速に目的のファイルを探し出すことができるはずだ。
| ■表:lessで使用する主なキー(コマンド) | |
| コマンド | 機能 |
|---|---|
| [Space] | 1ページ分進める |
| b | 1ページ分戻る |
| d | 半ページ分進める |
| u | 半ページ分戻る |
| [Enter] | 1行進める |
| kまたはy | 1行戻る |
| G | 最後の行に移動する |
| g | 最初の行に移動する |
| /パターン | パターンと一致する行へ移動する |
| n | 次のパターンへ移動する(画面下方) |
| N | 前のパターンへ移動する(画面上方) |
| q | 終了してプロンプトに戻る |
lessをカラー化する
厳密に言えば、Mark Nudelman氏の手による「less」こそがless (以下、純正less) のはずだが、ここはこだわる点ではない。Leopardに収録されたlessは純正lessで、日本語を含むテキストも表示できるが、ビルド時の設定によりエンコード形式はUTF-8以外扱えず、シフトJISや日本語EUCの自動判別機能もない。気の利いたユーザであれば、lv (リンク先の情報は少々古いので注意) や最新版のlessを自力でインストールしていることだろう。
ちょっとした裏ワザとして、テキストエディタ「vim」を使いlessをカラー化する方法がある。カラー表示は純正lessにない機能だが、vimのシンタックスハイライト機能とless互換の表示機能を組み合わせたシェルスクリプトを使えば、とても簡単にカラー化、ついでに日本語テキストの自動識別機能も追加することができるのだ。まずは、以下のドットファイルをホームディレクトリに作成しよう。
・~/.vimrc
set term=ansi
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=iso-2022-jp,sjis,euc-jp,utf-8
続いて、以下の要領でエイリアスを設定すれば準備OK。純正lessではないが、less同様の操作性にくわえ日本語自動識別機能とカラー表示機能を備えた「なんちゃってカラー対応less」の完成だ。なお、カラーで表示されるのは (コマンドや各種コンピュータ言語など) 予約語のみであり、ごく一般的なプレインテキストまで色分けされるわけではないので、念のため。
$ alias less='/usr/share/vim/vim72/macros/less.sh'