2013-11-04 21 views
0

设置我的提示,有颜色的工作。相反,超过一行的命令将开始出现在当前行的左侧,覆盖当前字符。新线不再终端与自定义提示

+1

可能重复的[终端不能使用颜色提示](http://stackoverflow.com/questions/6950769/terminal-not-working-with-color-prompt) – Kevin

回答

7

提示中的非打印字符需要包含在\[...\]中,这样bash才能准确计算提示的可见长度。

PS1='\[\e[3;32m\][\[email protected]\h:\W]$ \[\e[m\]' 
    ^^  ^^   ^^ ^^ 

bash本身不知道这些字节将不被终端显示;它是你的终端,而不是显示7字节的序列\e[3;32m,只是改变用于显示以下字符的颜色。另一方面,\u由用户名bash自己替换,因此您不必做任何特殊的事情即可告知bash如何正确处理它。

+0

真棒工作! –

+0

对于下一个人:即使使用'$(tput setaf 1)'设置颜色,您也必须这样做。我不认为你必须但我错了。它最终会看起来像'“\ [$(tput setaf 1)\]”'。 –

+0

使用函数来创建提示的PS1必须以不同的方式处理它,请参阅:http://superuser.com/questions/301353/escape-non-printing-characters-in-a-function-for-a-bash -提示 – retracile