这个 PS1 提示有什么问题?

这个 PS1 提示有什么问题?

我将 PS1-Prompt 的样式设计得类似于 iPython-Prompt,如下所示:

PS1FIRSTLINE="\[\n\][\t] \[\e[1m\e[38;5;196m\]\u@\H\[\e[0m\] in \[\e[1m\e[38;5;196m\]\w\[\e[0m"
PS1SECONDLINE="\n\e[92m\]In [\[\e[1m\]\#\[\e[0m\]] \$ "
PS1="$PS1FIRSTLINE$PS1SECONDLINE"

在此处输入图片描述

但是,有时我会遇到一些奇怪的问题,例如,提示后最后执行的命令的开头仍然存在并且无法删除。

我认为这是我转义颜色的方式的问题,\e[ ... ]而不是我使用的 bash 或 suckless 终端的问题。

有人能帮我吗?

答案1

初见这个答案我的。

目前还不清楚是否\n应该被视为可打印或不可打印,或者这种划分是否等同于可打印与不可打印(就像在可打印 ASCII 字符)。

然而,说到PS1,我认为\n应该称之为“打印”,因为它会影响提示的大小,而这才是这里最重要的。您应该将 的两个出现都放在\n之外\[ \]

第一个\n明确地位于 内\[ \]。第二个(在 的开头PS1SECONDLINE)乍一看似乎不在,但实际上也是如此。\[中有一个不匹配的PS1FIRSTLINE,当整体PS1被创建时,匹配\]来自PS1SECONDLINE

\n这些是经过适当修改并放在外面的变量\[ \]

PS1FIRSTLINE="\n[\t] \[\e[1m\e[38;5;196m\]\u@\H\[\e[0m\] in \[\e[1m\e[38;5;196m\]\w\[\e[0m\]"
#             ^^ deleted embracing \[ \]                                    added closing ^^
PS1SECONDLINE="\n\[\e[92m\]In [\[\e[1m\]\#\[\e[0m\]] \$ "
#                ^^ added opening
PS1="$PS1FIRSTLINE$PS1SECONDLINE"

相关内容