自定义终端提示会自行覆盖,并且在 OS X Terminal.app 上通常表现不正确

自定义终端提示会自行覆盖,并且在 OS X Terminal.app 上通常表现不正确

我的 bash_profile 中设置了以下提示:

export PS1='\[\e[1;94m\h:\W \u\e[1;93m\$\e[0m \]'
# default = '\h:\W \u\$ '

不幸的是,在某些情况下我遇到了问题:

  • 在空白提示符下,我输入一个字符,然后按退格键 - 提示符被完全删除,光标移到终端的左边缘,而不是简单地删除该字符

  • 如果我使用向上和向下箭头键自动完成跨越多行的命令,则只有当前行会发生变化,但上面的行(提示后)保持不变。

我怎样才能纠正我的提示,使它在任何情况下都能像默认提示一样正常运行?

答案1

您希望\[ ... \]在提示的非打印部分(即转义序列)周围使用 ,而不是整个提示。由于您在整个提示周围都使用了 ,因此 bash 无法确定提示占用了多少屏幕空间,并且会在错误的位置重新绘制命令。它应该是这样的:

export PS1='\[\e[1;94m\]\h:\W \u\[\e[1;93m\]\$\[\e[0m\] '

相关内容