zsh 向上箭頭提示符號混亂

zsh 向上箭頭提示符號混亂

我想我有一個錯誤,例如這個問題。我的提示是

PROMPT=$'\n%F{cyan}================================%f\n[%*] [%F{yellow}%?%f]\n[%F{cyan}%n@%m%f]\n[%F{green}%~%f]'

例如,我跑了:

================================
[2022-08-23 14:02:43] [0]
[jyxjjj@DESMG-MacBookPro]
[~]$ php media app:build 

當我按向上箭頭鍵盤,然後按向下箭頭時,它將顯示:

================================
[2022-08-23 14:02:43] [0]
[jyxjjj@DESMG-MacBookPro]
[~]$ php media app:buphp media app:build 

我確信我沒有提供故障樣本。它只是顯示為

php media app:buphp media app:build 

並正確運行為:

php media app:build 

也。

這意味著無論我看到什麼,它都會運行正確的命令。

所以這只是一個顯示錯誤。

然後我測試了所有方法,只有刪除 PS1/PROMPT 匯出才能修復此錯誤。

所以我認為我的 PS1 導致了這個錯誤。

如何修復它?

我不明白來自的答案這個問題

所以我想再問一下。

我很抱歉。

附加:

我的 zshrc 的一部分:

autoload -U colors && colors

setopt histignoredups
setopt histignorealldups
setopt appendhistory
setopt sharehistory
setopt promptsubst

然後:

$ echo $PS1

%F{cyan}================================%f
[%*] [%F{yellow}%?%f]
[%F{cyan}%n@%m%f]
[%F{green}%~%f]$(__git_ps1)$ 

$ echo $PROMPT

%F{cyan}================================%f
[%*] [%F{yellow}%?%f]
[%F{cyan}%n@%m%f]
[%F{green}%~%f]$(__git_ps1)$ 

$ echo $PROMPT_COMMAND
(nothing)

$ which PROMPT_COMMAND
PROMPT_COMMAND not found

$ which prompt_command
prompt_command not found

我測試過

PROMPT=$'\[\n\]\[%F{cyan}\]================================\[%f\n\][\[%*\]] [\[%F{yellow}\]%?\[%f\]]\n[\[%F{cyan}\]%n@%m\[%f\]]\n[\[%F{green}\]%~\[%f\]]'

它打印了[]

我測試過

PS1='\n\[\e[36m\]================================\[\e[0m\]\n[\t] [\[\e[36m\]\u@\h\[\e[0m\]]\n[\[\e[32m\]\w\[\e[0m\]]'

在 bash 中並且它有效。

答案1

我自己找到了答案:

來自 zsh 手冊,提示擴展,簡單提示轉義,第 13.2.5 節 - 視覺效果

%{...%}
包含一個字串作為文字轉義序列。大括號內的字串不應更改遊標位置。 […]

我的程式碼缺少這些%{%}.他們似乎是 zsh 的對應者\[\]在bash中

相關內容