Backspace 删除终端中的提示
Backspace deletes prompt in terminal
在以下情况下,我的 bash 提示如下所示:
Username@Hostname ~ $
如果我键入任意数量的字符,然后多次按删除按钮,它会清除整行。例如:
Username@Hostname ~ $ ls
然后我删除s
Username@Hostname ~ $ l
然后我删除l
|
然后我只剩下光标,没有任何提示。我可以正常输入命令,而且一切似乎都运行良好——但为什么提示消失了?有没有办法阻止这种行为?
如果您使用转义序列为提示着色(或以其他方式添加内容)而不将转义标记为 "non-printing",bash 将丢失对列的跟踪,并导致如下行为这个。
bash 的 manual 建议您将非打印字符放在 \[
和 \]
标记内的提示中。
对于给定的例子
PS1='\[3[1;32m\u@\h\[3[00m \[3[1;34m\w $\[3[00m '
可能的改进版本是
PS1='\[3[1;32m\]\u@\h\[3[00m\] \[3[1;34m\]\w $\[3[00m\] '
在以下情况下,我的 bash 提示如下所示:
Username@Hostname ~ $
如果我键入任意数量的字符,然后多次按删除按钮,它会清除整行。例如:
Username@Hostname ~ $ ls
然后我删除s
Username@Hostname ~ $ l
然后我删除l
|
然后我只剩下光标,没有任何提示。我可以正常输入命令,而且一切似乎都运行良好——但为什么提示消失了?有没有办法阻止这种行为?
如果您使用转义序列为提示着色(或以其他方式添加内容)而不将转义标记为 "non-printing",bash 将丢失对列的跟踪,并导致如下行为这个。
bash 的 manual 建议您将非打印字符放在 \[
和 \]
标记内的提示中。
对于给定的例子
PS1='\[3[1;32m\u@\h\[3[00m \[3[1;34m\w $\[3[00m '
可能的改进版本是
PS1='\[3[1;32m\]\u@\h\[3[00m\] \[3[1;34m\]\w $\[3[00m\] '