【コラム】
一度入力したコマンドをもう一度馬鹿正直に入力するという愚直な行為はぜひとも避けたい。lsとか短いコマンドは入力した方が早いだろうが、長いコマンドを入力し直すのはカッコ悪い。高機能シェルには「コマンド履歴」という「覚えておく機能」がある。zshのそれは特に強力だ。これは使わざるをえないだろう。
ということで早速リスト1.1を追加だ。
HISTSIZEとSAVEHISTで保存するコマンドの数を指定する。10,000はやり過ぎだとおもうかもしれない。しかし、実際はこの程度ではむしろ手ぬるい。漢はもはや一度入力したコマンドは未来永劫直接入力はしないものだ。回りを見渡すと億単位を越えてありえないサイズを指定している人もいる。
1,000では少ない。100,000くらいでもいい。一週間使ってみて、保存したい年数に換算しなおして行数を算出するといいだろう。たとえば一週間で2,000履歴ほどたまったとすれば、向こう50年間分保存するとしてざっくり計算すれば2,000×4.5×12×50=5,400,000だから、まぁ6000000あたりを指定しておけばいい。
こんな感じだ。コマンド履歴機能を有効にしてから図1.2のようにコマンドを入力する。次に、↑キーを押すと図1.3のようにひとつまえのコマンドが表示される。さらに↑キーを押すと図1.4のようにさらにひとつ前のコマンドが表示される。↑キーと↓キーで入力したコマンドを表示できるという寸法だ。
|
|
図1.2 コマンド履歴機能を有効にしてからコマンドを入力する |
|
|
図1.3 ↑キーを押すとひとつ前のコマンドが表示される |
|
|
図1.4 ↑キーをさらに押すとさらにひとつ前のコマンドが表示される |
ちなみにhistoryコマンドで図1.5のように履歴一覧を表示できる。数を指定しなければ直近のリストが、数を指定すればその数の分だけ遡って、0を指定すれば全部表示される。
|
|
図1.5 historyコマンドでコマンド履歴一覧を表示させることができる |
bashやtcshユーザであれば、そんなものはbashやtcshでとっくに実現している、と思うかもしれない。はい、その通りです。しかしzshが違うのはここから(ちなみに、tcshでは履歴の共有は難しいが、できないこともない。それは後ほど)。
まず図1.6を見てみよう。これはインタラクティブシェルで制御構文を使って処理を実行したところだ。ちなみに処理内容はFreeBSDでほかの依存からではなくユーザによって直接インストールされたアプリケーションの一覧を出力させるというものだ。
|
|
図1.6 for in、ifといった制御構文を使ってスクリプトを実行 |
↑キーを押すと図1.7のように複数行のままコマンドが表示される。bashでは1行コマンドに変換されたものが表示されるし、tcshでは最初の1行しか表示されない。しかもzshでは、表示された複数行のコマンドをエディタでも使うように編集できる。たとえば図1.8のような感じになる。
|
|
図1.7 ↑キーを押すと複数行のままコマンドが表示される |
|
|
図1.8 表示された複数行のコマンドはエディタでも使っているかのように編集できる |
これはらくちん。
bashやtcshで同じことをしようとしたら、普通はシェルスクリプトファイルを作ってからそいつを実行することになる。入力したコマンドを編集する術がない、または編集しずらいから、いっぺんファイルに書き出した方が扱いやすいからだ。
しかしzshでは気のおもむくままに書いて、編集が必要ならその場で編集すればいい。これは便利だ。zshを使いだしてからシェルスクリプトをファイルに書くことが少なくなった。
漢のツールとはこれくらいスマートにありたいものだ。
|
|
図1.9 当然そのまま実行できるという寸法だ |
|
|
図1.10 ちなみにhistoryでは1行に組み直されたコマンドが表示される |
もはや漢のスクリプトはコマンド履歴の中にあるものだ。
ちなみにsetopt hist_ignore_dupsは同じコマンドを重複して記録しないようにするオプション、setopt share_historyはコマンド履歴ファイルを共有する設定だ。
漢のデスクトップはターミナルウィンドウで埋めつくされている(screen使えという話はおいておく)。それぞれにzshが動作しているわけで、それぞれのzshで入力したコマンドは全部覚えて共有しておきたいにきまっている。
これを実現するオプションがsetopt share_historyだ。本当に全部保存されているのか気になるのであれば、tail -f ~/.zsh_historyのように履歴ファイルを監視するといい。コマンドを入力するごとに書き込まれるのがわかるだろう。
HISTFILE=~/.zsh_historyで履歴データを保存するファイルを指定しているので、工夫すればほかのユーザとすらコマンド履歴を共有するという変態的設定すら実現できる。変態的ではあるが、他人のコマンドからスキルを盗めるのでワクワクするのは間違いない。
しかし、履歴の数が多くなると、全部↑↓キーでコマンドを表示させるのは無理? はい、その通りです。
普通は履歴から検索するのだが、それは次回に説明だ。
今回説明した設定内容を設定ファイルにまとめたものを掲載しておく。ついでにtcshで同じような設定をする場合の例も紹介しておく。zshが使えない環境での参考にしてみてほしい。bashrcはzshrcと似たような感じなので掲載しなくてもいいだろう。特にtcshの変態的設定はかくもよだれを誘うに違いない。
tcshではまずヒストリファイルの共有ができない。ので、まずはset histfile=~/.history-"${tty:as|/|-|}"のようにして起動されたシェルごとに履歴ファイルを設定しておく。そして# merge history filesに書いてある魔法チックな処理だ。ここでコマンドを組み合わせてほかのtcshヒストリファイルを自力でマージしてやる。こうすることで起動時にほかのターミナルで保存された履歴データを共有できるといった寸法だ。
正直なところこの方法ではzshのように柔軟な共有はできないのだが、共有できないよりはましだろう(FreeBSDで動作することを確認している)。ただ、起動時に処理が実行されるので端末の起動が遅く感じられる。しかしまぁそこはそれ、一度起動したターミナルは二度と閉じなければ問題なしだ。
あ、それだと共有されるタイミングが…… ま、細かいことは気にしない。
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
元タカラジェンヌの真琴つばさ、昼ドラで大御所・小林幸子とガチンコ対決! [11:30 2/11] エンタメ |
|
入院・手術でかかるお金は? [11:15 2/11] キャリア |
|
[長谷川潤]パンダ出産に「私もいつか…」と 映画「51」で初ナレーション [11:13 2/11] エンタメ |
|
坂本教授、木の光合成に着目した不思議な音楽的挑戦!『ETV特集』 [10:08 2/11] キャリア |
|
バロックで異端!水墨画の巨匠、雪村周継の神業に迫る! [10:07 2/11] キャリア |