退格键删除 Bash 提示符

退格键删除 Bash 提示符

我最近通过变量修改了 Bash 提示符,$PS1这样我就可以有颜色了。它在我的.bashrc文件中:

PS1="\\[\e[0;32m[\h::\W] >>\e[m "

现在,如果我输入一些内容,然后必须退格以清除它,整个提示就会消失。如果我按回车键,就会出现一个新的。

看着这个问题关于同一个问题看来我缺少一个右括号。但我不知道它会去哪里。

答案1

起初,我认为反斜杠会在双引号内自行转义,这就是问题所在,但转念一想,"\\["这相当于'\['所以情况并非如此 - 它会以这种方式工作。

但真正的问题是readline不知道有多少字符被绘制到屏幕上以及有多少字符被拦截为终端转义。事实上,它很可能认为提示符已经被打印出来,因为你的提示符本质上是由一个开放引号的字符串组成的。

因此,正如我在评论中指出的,您需要关闭序列。该\[方法在提示中开始非打印转义序列 - 这样readline可以跟踪屏幕上绘制了多少个字符。您还需要像这样结束它:

PS1='\[non-printing terminal escapes here\]' 

man bash 2>/dev/null | grep '^ *\\\[' -A5

\[     begin  a  sequence  of   non-printing
       characters,  which  could  be used to
       embed  a  terminal  control  sequence
       into the prompt
\]     end  a sequence of non-printing char‐
       acters

相关内容