提示:通过切换命令删除行

提示:通过切换命令删除行

我尝试将提示符更改为我自己的偏好,但是当我切换最近输入的命令(使用键箭头)时,有时带有提示符的整行都会被删除,仅删除提示符的一些字符以及我最近输入的命令仍然是:

预期输出:

bucky in [~]: cd ..

输出:

buccd ..

“buc”是提示符的一部分,“cd ..”是我最近输入的命令。

我的提示:

PS1="\[\033[0;34m\u\] \[\033[0;37min\] \[\033[1;32m[\]\[\033[0;31m\w\]\[\033[1;32m]\]\[\033[0;37m:\] "

这里给你一个可视化的图像:

在此输入图像描述

如果需要的话,我使用 Ubuntu 16.04

答案1

这是因为提示的打印部分\u in \w:位于转义的方括号中。括号通常放在非打印字符周围,告诉 bash 不要为它们移动光标,从而正确计算提示符的大小。所以现在光标没有正确移动到打印部分。

.bashrc我建议您修改设置提示的部分而不是覆盖它...您可以取消注释(删除#)此行:

#force_color_prompt=yes

然后修改此代码片段中的第二行:

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\$ '

所以它说:

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;34m\]\u \[\033[0;37m\]in \[\033[01;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: '

或者,如果您愿意,只需将覆盖放在文件末尾:

PS1='\[\033[00;34m\]\u \[\033[0;37m\]in \[\033[01;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: '

这实现了我认为你在 Ubuntu 16.04 中想要的东西,并且不会破坏你所描述的方式(我之前在玩 PS1 时也经历过这种情况!)

答案2

方括号的错误使用。

PS1="\[\033[0;34m\]\u \[\033[0;37m\]in \[\033[1;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: "

答案3

是括号把你弄乱了。特别是工作目录开头的一个未转义的“[”。 “[\w”试试这个:

PS1="\033[0;34m\u \033[1;32m\[[\033[0;31m\w\033[1;32m]\033[0;37m: "

它在我的终端中完全符合您的要求。

相关内容