zshのsetoptを試してみる(履歴)
履歴に関するzshのsetoptを試してみる。
.zshrcには下記の設定をして、履歴のファイルを保存するようにしておく。
HISTFILE=~/.zsh_history HISTSIZE=100000 SAVEHIST=100000
extended_history
extended_historyを設定すると、.zsh_historyに開始時刻や実行時間が記録される。
$ cat .zsh_history : 1461321035:0;ls : 1461321038:0;cd /tmp : 1461321040:0;exit
hist_ignore_all_dups
hist_ignore_all_dupsを設定していると、
過去に同じ履歴が存在する場合、古い履歴を削除し、重複しないようになる。
例えば、履歴が下記の状態で、lsコマンドを実行すると、
% history 1 cd aaa 2 cd bbb 3 cd ccc 4 ls 5 cd ddd 6 cd eee 7 cd fff
下記のように、途中のlsコマンドの履歴は削除される。
% history 1 cd aaa 2 cd bbb 3 cd ccc 5 cd ddd 6 cd eee 7 cd fff 8 ls
hist_ignore_dups
通常、同じコマンドを繰り返すと、全て履歴に残る。
$ history 1 ls 2 ls 3 ls
hist_ignore_dupsを設定していると、前回と同じコマンドは履歴に追加されなくなる。
$ history 1 ls
当然ながら、前回と異なるコマンドを交互に繰り返すと、下記のような感じで履歴が残っていく。
$ history 1 cd 2 ls 3 cd 4 ls 5 cd 6 ls
hist_ignore_space
hist_ignore_spaceを設定していると、コマンドの先頭がスペースの場合、履歴に追加されない。
$ cd aaa $ cd bbb $ cd ccc $ history 1 cd aaa 2 cd ccc
hist_reduce_blanks
通常、余計な空白があっても、履歴にはそのまま記録される。
$ ls -la $ history 1 ls -la
hist_reduce_blanksを設定していると、余計な空白は除去して記録してくれる。
$ ls -la $ history 1 ls -la
share_history
通常、実行した履歴を他のターミナルで見れない。
term1$ cd aaa term1$ cd bbb term1$ cd ccc
term2$ history
share_historyを設定していると、他のターミナルでも見れるようになる。
term1$ cd aaa term1$ cd bbb term1$ cd ccc
term2$ history 1* cd aaa 2* cd bbb 3* cd ccc
ちなみに、share_historyを設定すると、
リアルタイム、かつ時刻付きで、履歴がファイルに書き込まれる。
$ cd aaa $ cd bbb $ cd ccc $ cat .zsh_history : 1461325234:0;cd aaa : 1461325236:0;cd bbb : 1461325237:0;cd ccc : 1461325242:0;cat .zsh_history
ただし、extended_historyが設定されていないと、zsh終了時には時刻なしで保存されるので注意。
$ exit (再ログイン) $ cat .zsh_history cd aaa cd bbb cd ccc cat .zsh_history