
這是我目前的提示定義:
PS1=$'%F{063}%1~%f %(1v.%F{099}%1v %f.)%F{063}%%%f '
RPROMPT='$VIMODE %m'
我正在努力整合這。基本上我開始發現它非常難以閱讀。
有什麼方法可以使其成為多行,其方式可能類似於 Perl 對正則表達式的作用(例如, /x 模式的作用。就像m{ ... }x
. the...
可以是多行的那樣)?
像這樣的東西:
PS1=$'
%F{063}%1 # format blue
~ # show current directory
%f
%(1v.%F{099}%1v %f.) # show git branch if git repo in purple
%F{063} # format blue
%# # % for user and # for root
%f '
RPROMPT='$VIMODE %m'
答案1
你可以這樣做:
PS1='%F{063}%1' # format blue
PS1=$PS1'~' # show current directory
PS1=$PS1'%f'
PS1=$PS1'%(1v.%F{099}%1v %f.)' # show git branch if git repo in purple
ETC。
答案2
在 Zsh 4.3.11 中,您可以使用Z
參數擴充標誌根據正常的 shell 解析規則分割字串值,同時丟棄註解(C
選項Z
)並將換行符號視為普通空格,而不是用分號替換它們(n
選項Z
)。然後,您可以將結果重新拼接在一起 ( j::
) 並評估引用等級 ( Q
),以允許您引用空格和其他有問題的字元(例如「裸」註釋介紹符):
PS1=${(j::Q)${(Z:Cn:):-$'
%F{063}%1 # format blue
~ # show current directory
%f" "
%(1v.%F{099}%1v %f.) # show git branch if git repo in purple
%F{063} # format blue
%# # % for user and # for root
%f" "
'}}
注意:這種解析模式似乎知道它應該將整個%(v…)
表達式解析為單字,因此我們不必保護條件值中嵌入的空間。但是,我們確實需要保護「頂級」空格(恰好在 後面的空格%f
),因為否則這些空格將被視為普通的單字分隔符號。最後的取消引用過程將處理任何引用機制(即\
, ''
, ""
, $''
),因此您可以選擇用於保護特殊字元的內容(例如「頂級」空格或用於最終值的註解引入符)。
如果您沒有使用 4.3.11,那麼您可以使用陣列來讓您將註解與字串元素散佈在一起。您可能需要使用比參數Z
擴展標誌更多的引用,但結果可能仍然可以忍受。
ps1_arr=(
%F{063}%1 # format blue
\~ # show current directory
%f' '
'%(1v.%F{099}%1v %f.)' # show git branch if git repo in purple
%F{063} # format blue
%\# # % for user and # for root
%f' '
)
PS1=${(j::)ps1_arr}
關於引用的一些註解:
- 你可以避免引用
~
if 你說%1~
而不是拆分它(畢竟它%~
帶有一個參數)。1
- 我引用了整個
%(v…)
單詞,但只有括號和空格需要保護。 - 如果啟用了 EXTENDED_GLOB,則只需引用
#
in 。%#
- 之後的空格
%f
需要某種引用。您可以使用反斜杠,但如果您的編輯器中沒有“可見空格”,它可能看起來像續行。
答案3
因為您可能想要快速得到答案,這是一個解決方案
PS1=$'\
%F{063}%1\
~\
%f\
%(1v.%F{099}%1v %f.)\
%F{063}\
%#\
%f '
但請注意,您不能在字串內發表評論