使用自定义 PS1 提示符时,Bash 会覆盖第一行

使用自定义 PS1 提示符时,Bash 会覆盖第一行

我的问题类似,但不同的是,这个问题

我在我的 中创建了一个自定义 PS1 .bashrc,如下所示:

STARTCOLOR='\e[0;36m';
ENDCOLOR="\e[0m"
export PS1="\n$STARTCOLOR\u@\h:\! <\t> \w\n\$ $ENDCOLOR"

看起来像这样(当然有颜色):

tony@home:515 <17:04:52> ~/IdeaProjects/SomeProject
$ gedit ~/.bashrc

我第一次注意到这个问题是在将我的项目链接到远程 git 存储库时。我期望以下内容(当然不是真正的回购):

$ git remote add origin https://[email protected]/tony/someproject.git

但是却得到了(注意它甚至覆盖了我的 PS1 的一部分):

project.gitte add origin https://[email protected]/tony/some

即使出现这种视觉上的奇怪现象,这些命令仍然有效。

太长了;博士当我的命令很长超过一行时,第二行会覆盖第一行。有什么想法吗?

答案1

将颜色转义序列包含在\[\](如您链接到的问题的答案中提到的)以将它们标记为不可打印字符。
这样,bash在计算应移动到新行的字符数后,就不会将它们计入提示长度。

STARTCOLOR='\e[0;36m'
ENDCOLOR="\e[0m"
export PS1="\n\[$STARTCOLOR\]\u@\h:\! <\t> \w\n\$ \[$ENDCOLOR\]"

相关内容