我希望为命令行提示符(在 bash 中)的主机名部分设置自定义颜色。
在我的.bashrc
文件中,默认的命令行提示符是:
PS1='[\u@\h \W]\$ '
为了仅对主机名进行着色,我提出了以下提示:
PS1='[\u@\e[40;36m\h\e[0m \W]\$ '
我为我工作的每个主机使用了不同的颜色。着色部分似乎按预期工作。但是,出现上述提示后,命令行上的导航将无法正常工作。例如,有时我无法将光标移动到行首或行尾。如果我切换回默认提示,一切都会再次正常工作。
我的彩色提示有什么问题吗?如何正确地仅为主机名指定颜色?
这个问题应该不重要,但我正在运行 Arch Linux KDE 并且我在 Konsole 中工作。
答案1
背景
在对特殊提示序列进行扩展之后,对提示中剩余的每个字符进行计数,以计算提示的长度。
问题
由于您已经添加了颜色序列(实际上不应将其计入提示的长度),因此bash
现在实际上认为您的提示比实际长度要长。
因此,bash
无法知道线路的起点或终点在哪里,从而造成上述功能障碍。
解决方案
来自bash
手册:
\[ 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 characters
只需将它们添加到颜色转义序列周围,这样它们就不会被计入提示长度。