zsh 中的多行 RPROMPT

zsh 中的多行 RPROMPT

我知道你可以在 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
  • 列印附加行。如果需要更多行,請重複命令。
  • PS1RPS1更短於PROMPTRPROMPT

示範

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 本身還是只有一行。

相關內容