我在这个问题上搜索了很多,发现了一些相关的问题,比如这个:终端提示没有正确包装。
我的问题是 bash 没有正确计算提示的长度,当我执行诸如ctrl-r或?滚动历史记录之类的事情时,这会把它搞砸。这基本上就是它的外观(没有颜色)。
? name@machine ~
01:09 $
Run Code Online (Sandbox Code Playgroud)
例如,当我使用向上箭头滚动浏览以前的命令时,某些字符会卡在提示中:
? name@machine ~
01:09 $m
Run Code Online (Sandbox Code Playgroud)
有时我也会遇到其他奇怪的行为,比如一些提示被覆盖(当我重新加载它时它会消失)。我的提示是这样的:
GIT_PROMPT_START_USER="\n_LAST_COMMAND_INDICATOR_ \[$Magenta\]\u\[$Orange\]@\[$White\]\h \[$Yellow\]\[$PathShort\]\[$ResetColor\]"
GIT_PROMPT_END_USER="\n\[$Blue\]$Time12a\[$ResetColor\] $ "
Run Code Online (Sandbox Code Playgroud)
我使用的东西叫做git-bash-prompt:> https://github.com/magicmonty/bash-git-prompt >。
我认为搞砸的是时间变量,它在另一个文件中定义:
Time12a="\$(date +%H:%M)"
Run Code Online (Sandbox Code Playgroud)
我已经尝试了\[$Time12a\]和$Time12ain GIT_PROMPT_END_USER,但它们似乎都不起作用。我的猜测是 bash 计算错误,因为$Time12a表示 5 个字符 (hh:mm)。
bash 是如何计算这个长度的?是否可以明确设置 bash 的长度?答案非常感谢!
所以我发现是什么搞砸了,这不是我所期望的 :)
它实际上是 \[$ResetColor\] bash 出于某种原因用来计算向前一步的长度(bash 认为我的提示长了 1 步)。
该变量由“bash-git-prompt”以及所有其他颜色定义(如果您想查看它,请参阅问题中指向 git-repo 的链接)。无论如何,修复很容易。我只是用我自己的定义覆盖了他们的定义:
ResetColor=$(tput sgr0)
Run Code Online (Sandbox Code Playgroud)
固定的!
(顺便说一句,如果其他人也有这个问题,我已经使用 $COLOR=$(tput setaf X) 覆盖了我用自己的定义使用的所有其他颜色,其中 COLOR 是您想要的颜色,X 是该颜色的 xterm- 256 号。)