
我知道你可以在 zsh 中定義多行提示:
PROMPT='
test
→ '
但我想知道,為什麼不能定義多行正確提示?我試過:
RPROMPT='
test
still test '
但什麼也沒有出現。這可能嗎?
答案1
precmd
您可以透過使用每次顯示提示之前執行的函數來獲得所需的(如果我猜對了)效果,以在提示上方列印附加行。
例如使用這個程式碼
precmd() {
LEFT="The time is"
RIGHT="$(date) "
RIGHTWIDTH=$(($COLUMNS-${#LEFT}))
print $LEFT${(l:$RIGHTWIDTH::.:)RIGHT}
}
PS1="foo > "
RPS1="bar"
解釋
$LEFT
並$RIGHT
分別握住左側和右側的琴弦。您可以透過語法使用命令的輸出$(...)
。$RIGHTWIDTH
是目前終端寬度的差異(儲存為桀騁在$COLUMNS
參數中)和左側字串的寬度。$((...))
用於數學表達式- 神奇的是
${(l:$RIGHTWIDTH::.:)RIGHT}
,其中參數以點$RIGHT
向左填充 (l
)(如果需要空格,請省略最後一個:.:
),長度為$RIGHTWIDTH
。 - 列印附加行。如果需要更多行,請重複命令。
PS1
和RPS1
更短於PROMPT
和RPROMPT
。
示範
The time is............................................Fri, Sep 18, 2015 8:20:22 PM
foo > _ bar
答案2
設定多行右側提示顯然也不是不可能:這個管理那個。但是,我想說它是這樣的:
local top_left='%F{blue}%~%f'
local top_right="%F{green}${git_branch}%f"
local bottom_left='%B%F{%(?.green.red)}%#%f%b '
local bottom_right='%F{yellow}%T%f'
local REPLY
fill-line "$top_left" "$top_right"
PROMPT=$REPLY$'\n'$bottom_left
RPROMPT=$bottom_right
透過佔據PROMPT
左上、右上以及左下,而 RPROMPT 佔據右下。儘管如此,RPROMPT 本身還是只有一行。