Zsh
zsh 提示未正確轉義
這是我目前的提示定義:
PROMPT='%(?..%F{red}%?%f:)%F{blue}%n%f:%F{green}%{${PWD/#$HOME/~}%} %( !.%F{紅色}.%f)%# %f'
游標有時會從實際提示後面的一個字元開始,例如在使用 搜尋歷史記錄時
ctrl``R
。
您需要從列印工作目錄的 PROMPT 部分周圍刪除
%{
and 。%}
PROMPT='%(?..%F{red}%?%f:)%F{blue}%n%f:%F{green}${PWD/#$HOME/~} %(!.%F{red}.%f)%# %f'
和序列旨在放置在不影響游標位置的提示位周圍(例如,硬編碼的控制序列)
%{
。%}
通過包圍實際移動游標的東西(通過列印目前工作目錄),您會混淆zsh的游標位置概念;當它需要重新繪製目前行的一部分時(例如,當您使用 Cr 搜尋時),它最終會將游標放在錯誤的位置。您可以通過更改為具有更長列印表示的目錄來驗證這一點:如果您
cd /tmp
是 ,則游標將錯位 4 列( 的長度/tmp
)而不是 1 列( 的長度~
)。此外,您通常可以使用
%~
而不是${PWD/#$HOME/~}
包含目前工作目錄。因此,如果這是您唯一的替代品,那麼您可以關閉PROMPT_SUBST
.此外,
${PWD/#$HOME/~}
如果$PWD
包含%
或控製字元,您會遇到問題。如果可能,最好不要在內容中包含不受控制的數據,$PROMPT
如果無法避免,您需要進行一些轉義,以便它作為提示字元串仍然有意義。