zshプロンプトのカスタマイズ中にハマったのでメモ
やりたかったこと
コマンドに成功したら青いシャキーンが、失敗したら赤いショボーンが出てくるプロンプトです
確実に失敗するコマンドがパッと思いつかなかったのでnot foundになりそうなのを打ってます。
失敗例
SHOBON='(´・ω・`)'
SHAKIN='(`・ω・´)'
PROMPT='%(?.%F{cyan}$SHAKIN.%F{red}$SHOBON%)%f %B%F{green}%n@%M%f%b: (%F{blue}%D %*%f) [${vcs_info_msg_0_}]
%B%F{blue}%~%f%b $ '
こちらが失敗例のコード
スクショ撮り忘れましたが、コマンド成功時に
(`・ω・´))
このようにカッコが二重になります。
成功例
SHOBON=$'\(´・ω・\`%)'
SHAKIN=$'\(\`・ω・´%)'
PROMPT='%(?.%F{cyan}$SHAKIN.%F{red}$SHOBON) %f %B%F{green}%n@%M%f%b: (%F{blue}%D %*%f) [${vcs_info_msg_0_}]
%B%F{blue}%~%f%b $ '
こちらなら上記写真のようになります。
今回の学び
2つを比べてどう違うかといえば、成功例では閉じカッコが%でエスケープされている点です。
今回の失敗は、shellのエスケープシークエンスと、zshpromptのエスケープシークエンスを混同したことからおこったものでした。