Backspace删除终端中的提示

时间:2015-03-21 16:53:32

标签: macos bash terminal

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

Username@Hostname ~ $

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

Username@Hostname ~ $ ls

然后我删除了s

Username@Hostname ~ $ l

然后我删除了l

|

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

1 个答案:

答案 0 :(得分:1)

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

bash的manual建议您在\[\]标记内的提示中放置非打印字符。

对于给定的例子

PS1='\[\033[1;32m\u@\h\[\033[00m \[\033[1;34m\w $\[\033[00m '

可能的改进版本将是

PS1='\[\033[1;32m\]\u@\h\[\033[00m\] \[\033[1;34m\]\w $\[\033[00m\] '