zshのhistoryうんぬん

zshの魅力として、history機能の強さがよく語られる。

制御構文の履歴

$ for i in 1 2 3
> do
> echo $i
> done
1
2
3
<↑でhistoryを遡る>
$ for i in 1 2 3; do echo $i; done
% for i in 1 2 3
for> do
for> echo $i
for> done
1
2
3
<↑でhistoryを遡る>
% for i in 1 2 3
do
echo $i
done

bashでは複数行に分けて書いたものが1行にまとめられてhistoryに格納されてしまうが、zshでは入力した形がそのまま再現される、ということらしい。
編集しやすくなるので、このような書き方をしてちょっとずつ編集する、という方法は便利かもしれない。
最初から1行にまとめて書いてしまっていたらあまり意味はなさそう…。

履歴の共有

HISTFILE=~/.zsh_history    # 履歴データを保存するファイルを指定
setopt share_history       # コマンド履歴ファイルを共有する設定

これを指定しておけば、別々の所で開いたzsh同士で履歴が共有できるようになるらしい。
bashでも頑張って設定すればできないことはないらしいけど。
iandeth. - bashにて複数端末間でコマンド履歴(history)を共有する方法

履歴の検索など

KeyRemap4MacBookを入れているからか、

% bindkey -L

で表示されるものの通りに動いていないようだ。
^R で history-incremental-search-backward はできるのに、
^S で history-incremental-search-forward はできない
とか。
^Xsは効くので前方検索はこれを使えばできる…が、押しづらい。
^P と ^N は上下キーの代わりとして手放したくないしなぁ。どうしよう。
今のところは履歴検索でそれほど困ることもなさそうだし、とりあえず放置しておこう。
何か困ってきたら対処を考える。