いまさら聞けないシリーズの第5弾は、再び「シェルの基本技」について。実用的なトピックを選んでいるので、ターミナル初心者でも便利に使えるはずだ。シェルとは直接関係ないが、ターミナル上で日本語テキストファイルをプレビューするための対策も紹介しているので、あわせて参考にしてほしい。
以前実行したコマンドラインを検索する
過去に実行したコマンドラインを「Control-p(C-p)」で呼び出せる(履歴機能)ことは、前回紹介したとおり。初期設定では500件もの履歴が保存されているため、つねにターミナルを起動しているようなシェルのヘビーユーザでないかぎり、履歴を呼び出すだけでコマンドの用は足りてしまうかもしれない。
しかし、もう少し利用頻度が高いとそうはいかない。50回、100回も「C-p」を押すわけにもいかないし、誤って通り過ぎてしまう可能性もある。
そんなときには、bashの履歴検索機能を使おう。利用するショートカットキーは「C-r」、Reverseの「R」と覚えればいい。「C-r」を押すと、プロンプト下に「(reverse-i-search)」と現れるので、検索したい文字を入力すればインクリメンタルサーチ(逐次検索)方式で過去に向かいコマンド履歴がサーチされ、ヒットしたものが右側に表示される。
インクリメンタルサーチなので、文字を入力し続ければ対象が絞り込まれていくし、さらに「C-r」を押せばそこまで入力した文字列で履歴を検索できる。たとえば、defaultsコマンドの場合、「C-r」を押したあと「defa」あたりまで入力し、何度か「C-r」を押せば、過去に実行したコマンドラインを探し出せるはずだ。
エディタをすばやく呼び出す
なにかと利用することが多い「テキストエディタ」。OS Xには、DockやLaunchpad、SpotlightやFinder上でダブルクリックなどいろいろな起動の手段が用意されているが、bashにもとっておきの(?)方法がある。それは、Controlキーを押しながらXキーに続けてControlキーを押しながらEキー、すなわち「C-x C-e」を使う方法だ。
本来C-x C-eは、Emacsやvimなどのエディタでコマンドを入力し実行するためのショートカットキー -- 書き捨てのシェルスクリプトを作成したいときに便利なのだ -- に利用するものだが、それを律儀に守る必要はない。EDITOR環境変数に好みのエディタを定義し、それを起動するために利用しても構わない。
たとえば、例1のとおりEDITOR環境変数に「open -e」(openコマンドでテキストエディットを起動)と定義しておけば、プロンプトでC-x C-eを押すだけでテキストエディットを起動できる。例2の要領で実行ファイルを指定すれば、「メモ」など任意のエディタも起動できる。ウインドウが非アクティブな状態で起動されてしまうが、個人的にはDockやLaunchpadより重宝している。
例1:C-x C-eで「テキストエディット」を起動できるようにする
$ export EDITOR='open -e'
例2:C-x C-eで「メモ」を起動できるようにする
$ export EDITOR='open -a /Applications/Notes.app/Contents/MacOS/Notes'
日本語テキストファイルを"チラ見"するための準備
OS X Yosemiteの現在、ターミナルで日本語を扱うためのハードルはほぼ消滅した。デフォルトのシェルがbashに変わる前は(当初は「tcsh」だった)、マルチバイト文字を通さないため日本語IMEで文字入力できず、表示も崩れがちで、環境整備はひと苦労だった。現在は、テキストエンコーディング形式に「Unicode (UTF-8)」を指定してさえおけば、ほぼデフォルトの状態で日本語を扱える。
ハードルが残っているとすれば、それは「標準のページャ(less)がシフトJISや日本語EUCを通さない」ことだろうか。テキストファイルの内容を確認したい場合、UTF-8のテキストファイルであれば「less ○○○.txt」だけで表示できるが、他のエンコーディング形式のテキストファイルは文字化けする。
シェルとは直接関係ないが、AppleはlessをシフトJIS/日本語EUC対応させるつもりはなさそうなので、自力で対策するしかない。幸い、「vim」に付属のスクリプトをエイリアスとして定義すれば日本語対応のlessとして利用できるので、他の日本語対応ページャをインストールするほどではない場合にはこの方法がお勧めだ。なお、「~/.vimrc」の用意も必要になるので念のため。
$ alias less='/usr/share/vim/vim73/macros/less.sh'
・~/.vimrc
set term=ansi
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=iso-2022-jp,sjis,euc-jp,utf-8