zshのプロンプトを編集しようと思ったのだが、zshenv
にもzshrc
にもPROMPTの定義が見つからず、いちから再定義するとよかったところまで消えた。いいとこ取りしたい時にどうすれば?と言う記事です。
#現在のPROMPTの値を取得
シェルで
$ echo $PROMPT
とすると、現在のPROMPTの値が返ってくるのでこれをコピーする。
echo.sh
$ > echo $PROMPT
${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{5}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]}
次に$ vi ~/.zshenv
として以下のような行を追記する。
.zshenv.sh
PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{5}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} '
これで再現は完了。(''で括るのと、末尾の空白を忘れないように)
#現在の時刻をプロンプトに表示し、1秒おきに更新
これを以下の3行のように変更すると、プロンプトが常に最新の時刻を表示するようになる。
.zshenv.sh
PROMPT='%F{6}%D %*%f ${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{5}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} '
TMOUT=1
TRAPALRM() { zle reset-prompt }
ん〜。便利!
- プロンプトには常に現在時刻が入ることになる
- 時刻は改行した時点で確定するのでいつそのコマンドを打ったか後で遡れる
- 作業に没頭して予定や約束に遅れるというようなことを防止できると考える