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 中

相关内容