Bash 无法正确计算提示长度

Bash 无法正确计算提示长度

我在谷歌上搜索了很多关于这个问题的信息,发现了一些相关的问题,比如这个:终端提示未正确换行

我的问题是 bash 无法正确计算提示的长度,当我执行类似ctrl-r滚动历史记录之类的操作时,这会弄乱它。这基本上就是它应该看起来的样子(没有颜色)。

✔ name@machine ~

01:09 $

例如,当我使用向上箭头滚动浏览以前的命令时,某些字符会卡在提示中:

✔ name@machine ~

01:09 $m

有时我还会遇到其他奇怪的行为,例如某些提示被覆盖(当我重新加载它时,所有提示都会消失)。我的提示如下所示:

GIT_PROMPT_START_USER="\n_LAST_COMMAND_INDICATOR_ \[$Magenta\]\u\[$Orange\]@\[$White\]\h \[$Yellow\]\[$PathShort\]\[$ResetColor\]"

GIT_PROMPT_END_USER="\n\[$Blue\]$Time12a\[$ResetColor\] $ "

我用的东西叫做git-bash-prompt:>https://github.com/magicmonty/bash-git-prompt>。

我认为搞砸的是时间变量,它是在另一个文件中定义的:

Time12a="\$(date +%H:%M)"

我已经尝试过\[$Time12a\]$Time12ain GIT_PROMPT_END_USER,但它们似乎都不起作用。我的猜测是 bash 计算错误,因为$Time12a代表 5 个字符 (hh:mm)。

bash 是如何计算这个长度的?是否可以明确设置 bash 的长度?非常感谢回答!

答案1

所以我发现是什么搞砸了,这不是我所期望的:)

实际上,bash 由于某种原因使用 \[$ResetColor\] 来向前计算一步的长度(bash 认为我的提示符长了 1 步)。

该变量由“bash-git-prompt”以及所有其他颜色定义(如果您想查看它,请参阅问题中 git-repo 的链接)。不管怎样,修​​复很容易。我只是用我自己的定义覆盖了他们的定义:

ResetColor=$(tput sgr0)

固定的!

(顺便说一句,如果其他人也遇到这个问题,我已经使用 $COLOR=$(tput setaf X) 覆盖了我自己的定义中使用的所有其他颜色,其中 COLOR 是您想要的颜色,X 是该颜色的 xterm- 256号。)

相关内容