El mensaje de zsh está en mal estado con la flecha hacia arriba

El mensaje de zsh está en mal estado con la flecha hacia arriba

Creo que tuve un error comoesta pregunta. Mi mensaje es

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

Por ejemplo, ejecuté:

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

Cuando presiono la flecha hacia arriba del teclado, luego presiono la flecha hacia abajo, se mostrará:

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

Estoy seguro de que no di una muestra de error. Simplemente se muestra como

php media app:buphp media app:build 

y se ejecuta correctamente como:

php media app:build 

también.

Eso significa que todo lo que vi, ejecuta el comando correcto.

Entonces es solo un error de visualización.

Luego probé todas las formas, solo eliminar la exportación PS1/PROMPT solucionará este error.

Entonces creo que mi PS1 causó este error.

¿Como arreglarlo?

No entendí la respuesta deesta pregunta.

Entonces quiero preguntar de nuevo.

Lo siento mucho.

Adicional:

alguna parte de mi zshrc:

autoload -U colors && colors

setopt histignoredups
setopt histignorealldups
setopt appendhistory
setopt sharehistory
setopt promptsubst

Entonces:

$ 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

probé

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

e imprimió el [y]

probé

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

en bash y funciona.

Respuesta1

Encontré la respuesta por mi cuenta:

Del manual de zsh, Expansión de mensajes, Escapes de mensajes simples,sección 13.2.5 - Efectos visuales.

%{...%}
Incluya una cadena como secuencia de escape literal. La cadena entre llaves no debe cambiar la posición del cursor. […]

A mi código le faltaban estos %{y %}. Parecen ser las contrapartes de zsh de\[y \]en fiesta.

información relacionada