退格键删除终端中的提示

Nxt*_*xt3 1 macos bash terminal

在以下场景中,我的 bash 提示符如下所示:

Username@Hostname ~ $
Run Code Online (Sandbox Code Playgroud)

如果我输入任意数量的字符,然后多次按删除按钮,它将清除整行。例如:

Username@Hostname ~ $ ls
Run Code Online (Sandbox Code Playgroud)

然后我删除s

Username@Hostname ~ $ l
Run Code Online (Sandbox Code Playgroud)

然后我删除l

|
Run Code Online (Sandbox Code Playgroud)

然后我的光标就离开了,没有任何提示。我可以正常输入命令,一切似乎都正常 - 但为什么提示符消失了?有办法阻止这种行为吗?

Tho*_*key 5

如果您使用转义序列为提示着色(或以其他方式添加内容),而不将转义标记为“非打印”,则 bash 将失去对该列的跟踪,并导致类似这样的行为。

bash 的手册建议您将非打印字符放入提示符中的\[\]标记中。

对于给定的例子

PS1='\[\033[1;32m\u@\h\[\033[00m \[\033[1;34m\w $\[\033[00m '
Run Code Online (Sandbox Code Playgroud)

可能的改进版本是

PS1='\[\033[1;32m\]\u@\h\[\033[00m\] \[\033[1;34m\]\w $\[\033[00m\] '
Run Code Online (Sandbox Code Playgroud)