我基本上知道问题是什么,因为我需要\[...\]用作转义(非空格?)字符的方法,并允许 bash 正确计算提示的宽度。
但是,我无法解决所有问题,并且一直在使用反复试验,因为我不太明白我到底需要在哪里\[...\]放置所有东西。
STARTCOLOR='\[\e[0;31m\]'
ENDCOLOR='\[\e[0m\]'
BACKGROUND='\[\e[47m\]'
export PS1="$STARTCOLOR$BACKGROUND\u@\h \[\t\]$ENDCOLOR\w>\$?\$\]"
Run Code Online (Sandbox Code Playgroud)
是我正在使用的。现在唯一的问题似乎是,如果我使用箭头键滚动以前的命令太久\w>\$?\$\,我的 PS1 部分将消失。如果我在使用先前的命令前进后使用箭头键向后倒退,也会发生这种情况。
问题是您正在使用非打印标记来打印输出(\t- 时间戳)
STARTCOLOR='\[\e[0;31m\]'
ENDCOLOR='\[\e[0m\]'
BACKGROUND='\[\e[47m\]'
export PS1="$STARTCOLOR$BACKGROUND\u@\h \t$ENDCOLOR\w>\$?\$ "
Run Code Online (Sandbox Code Playgroud)
在\[ ... \]只对周围的非打印字符序列,例如色码是。