どうも、nippa です。
利用している Mac のデフォルトのシェルを zsh に乗り換えようと思っています。
zsh と bash では少し違いがあるので、その点についてもまとめていきたいと思います。
今回は zsh でのコマンドラインでの入力履歴関連をまとめておこうと思います。
bash のコマンドラインでの入力履歴については、こちらを参考にしてください。 timesaving.hatenablog.com
環境
MacOS 10.15
zsh でのコマンドの入力履歴
zsh でのコマンドの入力履歴関連の環境変数
- HISTFILE: コマンド履歴を保存するファイル名
- HISTSIZE: zsh が保持するコマンド履歴の上限数(メモリ保存)
- SAVEHIST: HISTFILE で指定したファイルに保存するコマンド履歴の上限数(ディスク保存)
環境変数の確認
# コマンド履歴を保存するファイル名 echo $HISTFILE # 出力:デフォルト /User/[ユーザー名]/.zsh_history # bash が保持するコマンド履歴の上限数 echo $HISTSIZE # 出力:デフォルト 2000 # ファイルに保存するコマンド履歴の上限数 echo $SAVEHIST # 出力:デフォルト 1000
コマンド履歴関連の環境変数の変更
export HISTFILE=[ファイルパス] export HISTSIZE=100000 export SAVEHIST=100000
コマンド履歴の検索
デフォルトではcontrol
+r
でリバース検索(bck-i-search)が可能です。
また、リバース検索からフォワード検索する(fwd-i-search)を可能にするには、設定の変更が必要です。
フォワード検索はcontrol
+s
で可能ですが、デフォルトでは端末ロック(stop)が割り当てられています。
割り当てを解除するには、
# 割当の確認 stty -a # 出力 speed 38400 baud; 30 rows; 80 columns; lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8 -ignbrk brkint -inpck -ignpar -parmrk oflags: opost onlcr -oxtabs -onocr -onlret cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow -dtrflow -mdmbuf cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>; eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W; # ストップとスタートの割当解除 stty stop undef stty start undef # 割当の再確認 stty -a # 出力 speed 38400 baud; 30 rows; 80 columns; lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo -extproc iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8 -ignbrk brkint -inpck -ignpar -parmrk oflags: opost onlcr -oxtabs -onocr -onlret cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow -dtrflow -mdmbuf cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>; eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = <undef>; status = ^T; stop = <undef>; susp = ^Z; time = 0; werase = ^W;
history コマンド
zsh での history は fc -l
のエイリアスになっています。
man zshbuiltins
で、history を検索すると下記が記載されています。
history Same as fc -l.
ISO8601('yyyy-mm-dd hh:mm')の時間形式で入力履歴は以下のオプションで表示させることができます。
history -i # 出力 ... 1000 2020-12-04 20:30:00: history
時間形式を指定して、コマンドの入力履歴を表示させるには、以下のように指定してください。
# タブ区切りを利用する場合 HIST_FORMAT="'%Y-%m-%d %T' `$(echo -e '\t')`" alias history="fc -t ${HIST_FORMAT} -il" history # 出力 ... 1000 2020-12-03 20:30:00: history
入力履歴ファイルの中のコマンドの実行
以下のコマンドを入力履歴ファイルに保存されたコマンドを直接実行することができます。
![historyの番号]
コピペはファイル内部の番号だけですみます。
感想
基本的には zsh では bash で設定したことがそのまま使えますが、細かい部分で違いがあるので、少しずつまとめながら乗り換えて行こうと思います。
ではでは、また次回。