.bashrc 编辑弄乱了终端命令向上箭头历史记录打印

.bashrc 编辑弄乱了终端命令向上箭头历史记录打印

我想让我的 Ubuntu 终端提示看起来更加个性化,并且想在写命令时更改“$”前面的文本。

据我所知,这是通过编辑主目录中的 .bashrc 文件来完成的,所以我进入那里并进行了更改

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='\e[1;32m[\W]\$ \e[m'
fi

这有效并且终端看起来正如我想要的那样。

但是过了一段时间,当我使用向上箭头键获取命令历史记录并输入几个命令时,事情变得奇怪了。

从一条干净的行开始,然后按向上箭头键即可。再次按下该键时,行上的文本将限制在约 15 个字符,而历史记录中的新命令(应该显示)在开头将限制为几个字符,并且它们在命令行上合并在一起。

例如我最近执行的两个命令是

Java Test4 words-250.txt words-250-in.txt
Javac Test4.java

按一次向上箭头键时,会显示第一行,这是理所当然的。按第二次时,会显示以下内容:

Java Test4 worc Test4.java

尽管输出结果很奇怪,但终端工作正常。例如,如果我在执行上述操作后按 Enter 键,Javac Test4.java 将运行。如果我尝试使用退格键删除整行,我只能删除到以下行:

Java Test4

如果随后按下回车键,我会得到一个新的空行,就像按下回车键时该行是空的一样。

如果我重置.bashrc 文件,所有这些都会消失。

为什么会发生这种情况?我该如何解决?

答案1

您需要将转义序列括在\[...\],告诉 bash 在确定提示符宽度时不要计算它们。否则,bash 会认为提示符比实际显示的长度要长(因为转义序列不占用任何可见空间)。

因此,调整另一个提示:

PS1='\[\033[1;32m\][\W]\$ \[\033[00m\]'

上面的 PS1 和下面的 PS1 效果都一样好:

PS1='\[\e[1;32m\][\W]\$ \[\e[m\]'

相关内容