Bash 提示没有正确换行

Bash prompt does not wrap text properly

我最近为我的 bash 提示添加了一些颜色,现在当我键入命令时,文本不能正确换行。

这是一个例子:

MacBook-Pro:~ williamgiles$
long commandwilliamgiles$ this is a really long command,this is a really 

我原来的PS1:

\h:\W \u$

我的新颜色:

\e[0;35m\h:\W \u$ \e[m

您需要将 color-changing 序列标记为不影响提示长度的内容 on-screen。

PS1='\[\e[0;35m\]\h:\W \u$ \[\e[m\]'

bash已经知道要考虑\h\W\u的扩展;它不知道 \e[0;35m 不仅仅是终端将在屏幕上显示的 7 个字符。

添加到@chepner 的回答中,我个人在 .inputrc
中使用 </code> 和 <code> 这是一个例子:

set vi-ins-mode-string \e[38;5;015m╰─\e[0m\e[38;2;191;254;33m(ins)⫸\e[0m\e[5 q\e]12;rgb:bf/fe/21\e\
set vi-cmd-mode-string \e[38;5;015m╰─\e[0m\e[38;2;191;121;33m(cmd)⫸\e[0m\e[2 q\e]12;rgb:bf/79/21\e\

</code> 表示 zero-length 部分的开始,<code> 表示结束。 ([=16=]1[=17=]2 也有效)
不久前我写了一篇关于这个话题的blog post。您可能会发现它很有趣。

我的 shell 最终看起来像什么(顶部部分可以通过使用 Oh-My-Posh: