带有自定义.bash_profile的终端中的奇怪行为


8

很难描述行为,但是这里有一个简短的片段:

http://www.youtube.com/watch?v=9KqHBA94FPI

基本上,当输入多行命令时,在第一行的末尾,插入块将返回到第一行的开头,覆盖第一行,然后像往常一样继续到第二,第三行等。 。删除时,它允许我删除整个命令,以及命令上方一行的空白(我已对其进行了设置,因此命令可以在包含user @ host / Directory信息的行之后插入。然后甚至可以删除我在上面介绍了目录和主机的最后一部分,很抱歉,我对此解释很糟糕,该视频会做得更好。

这是我的.bash_profile的内容:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

Answers:


12

您应将非打印字符(在本例中为ANSI转义序列)用bash转义序列包围:\[\]。这样,bash将知道包含的字符不可见,即。他们不占用空间,即。它们不应包含在换行器使用的字长计算中。

换句话说,改变您的PS1定义:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… 至:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

这是相同的PS1值,仅用于人类阅读,可能具有改进的可读性(ANSI换码符在下一行,bash换行在中间,而打印字符在上一行)。

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

进一步阅读:


这很完美,解决了我的问题。非常感谢您的帮助!
Blair Beckwith 2012年

布莱尔,欢迎问不同!如果您想回答问题,请投票并接受。
nohillside

0

我每个人

我遇到了类似的问题,仅通过将PS1变量从原始变量更改为一个非常简单的变量,就找到了解决方案,实际上是我的名字:export PS1 = Alex

现在,我的终端不再有任何奇怪的行为。

希望它会有所帮助。

亚历克斯(在Mac Lion 10.8上)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.