在命令行提示符中对主机名进行着色

在命令行提示符中对主机名进行着色

我希望为命令行提示符(在 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

只需将它们添加到颜色转义序列周围,这样它们就不会被计入提示长度。

相关内容