RPROMPT には改行を入れられない
zsh で右プロンプトに情報を表示するときには RPROMPT
環境変数を使います。
しかし、RPROMPT
には改行を含めることができません。左プロンプトは行けるのに……。
# 2行表示される
PROMPT=$'top left\nbottom left %# '
# 何も表示されない
RPROMPT=$'top right \nbottom right'
解決方法
プロンプトを表示する直前に、自分で print してあげればいいです。
# プロンプトの表示直前に毎回実行される
precmd() {
local left="top left"
local right="top right "
# $left と $right の間をスペースで埋めて表示
print -P $left${(r:($COLUMNS-${#left}-${#right}):: :)}$right
}
PROMPT=$'bottom left %# '
RPROMPT=$'bottom right'
実際の設定はこのようにしています。
autoload -Uz vcs_info
zstyle ':vcs_info:*' formats '[%b]'
zstyle ':vcs_info:*' actionformats '[%b|%a]'
precmd () {
# 1行あける
print
# カレントディレクトリ
local left=' %{\e[38;5;2m%}(%~)%{\e[m%}'
# バージョン管理されてた場合、ブランチ名
vcs_info
local right="%{\e[38;5;32m%}${vcs_info_msg_0_}%{\e[m%}"
# スペースの長さを計算
# テキストを装飾する場合、エスケープシーケンスをカウントしないようにします
local invisible='%([BSUbfksu]|([FK]|){*})'
local leftwidth=${#${(S%%)left//$~invisible/}}
local rightwidth=${#${(S%%)right//$~invisible/}}
local padwidth=$(($COLUMNS - ($leftwidth + $rightwidth) % $COLUMNS))
print -P $left${(r:$padwidth:: :)}$right
}
# ユーザ名@ホスト名
PROMPT='%n@%m %# '
# 現在時刻
RPROMPT=$'%{\e[38;5;251m%}%D{%b %d}, %*%{\e[m%}'
TMOUT=1
TRAPALRM() {
zle reset-prompt
}
見やすい✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌