17

如果我将命令提示符设置为:

export PS1='\033[0;33m[\u@\h \w]\$ \033[00m'

提示的颜色将为黄色,“$”字符之后的所有内容都将是默认的终端颜色。这是我所期望的。但是,如果我回忆一个命令行并尝试对其进行编辑,请移动光标——如果我正在尝试编辑命令行,则可以是 UpArrow/Ctrl-A (set -o emacs) 或 ESC K (set -o vi)足够长,光标不在命令的开头。键入 Ctrl-A (set -o emacs) 或 ^ (set -o vi) 不会将光标移动到我看到的屏幕上调用行的开头。类似地,试图将光标定位到行尾(Ctrl-E 或 $,取决于)会导致它被放置在看起来是行尾的几个字符之后。看起来 bash 被我添加到提示中的转义字符弄糊涂了。

4

1 回答 1

27

您需要将非打印字符括起来,\[ ... \]以便bash在计算提示长度时知道忽略它们:

export PS1='\[\033[0;33m\][\u@\h \w]\$ \[\033[00m\]'
于 2013-07-02T19:34:00.443 回答