Zshのプロンプトが変な位置に改行される問題の解決
原因を調べる
何が起きているか
以下のような部分までコマンドを入力した状態でTABを押す
https://gyazo.com/98627a2a20737cb2fd0514cd5257cda0
結果
https://gyazo.com/c9f293bfcb133db9a54b33a16e0237f4
明らかに、位置が変
次にターミナル幅いっぱいまでテキストを入力していると
https://gyazo.com/40488dfeb086185e7095b40c308c8549
折り返した時に元のコマンドが消える
ただし表示上だけ
https://gyazo.com/9c2fb21c81244e35d79dcc1b320e3cc2
これは普通に放置してると業務にも支障をきたすので調査した
調査
この記事のはbashの記事だけれど、zshでも同じことが起きている可能性は高そう 今の設定
code:zsh
status_code () {
local color face
# local ok="(*'-')イイカンジ"
# local ng="(;^q^%)アビャー "
local ok="(*'-')!"
local ng="(;^q^%)?"
face="%(?.$ok.$ng)"
echo "${color}${face}${reset_color}"
}
# %F{色} 任意のテキスト %fで、%fまで色を変更できる
PROMPT='%F{003}%*%f %F{magenta}%n%f@%F{blue}%M%f %F{200}%~%f${vcs_info_msg_0_} status_code < %# '
status_codeの部分を入れたときから変になっていることは気づいていた
解決
前述の設定を次のように変更したら解決
code:2.zsh
status_code () {
local ok="(*'-'%)!"
local ng="(;^q^%)?"
local color face reset
face="%(?.$ok.$ng)"
reset="%{$reset_color%}"
echo "$color$face$reset"
}
# %F{色} 任意のテキスト %fで、%fまで色を変更できる
PROMPT='%F{003}%*%f %F{magenta}%n%f@%F{blue}%M%f %F{200}%~%f${vcs_info_msg_0_} status_code < %# '
色を格納している変数colorの前後を%{%}で囲った
前述の記事と同じく、ANSIエスケープシーケンスの文字幅を除外できていなかったっぽい
colorとreset全体を%{%}で囲ったら位置がずれたりしなくなった
以上