终端PS1中的断线修复

Thi*_*GUy 11 macos terminal ps1

我有这个代码为我的终端着色:

export PS1="\e[1;30m\][\e[\e[1;30m\]\e[1;33m\] \u@\H \[\e[1;32m\]\w\[\e[0m\] \e[1;30m\]]\n[\[ \e[1;31m\]\T\[\e[0m\]\e[1;30m\] ] > \e[37m\]"
Run Code Online (Sandbox Code Playgroud)

但是我有一个问题,当文本应该在新行中时它会覆盖第一行.

例:

Gor*_*son 16

为了让bash能够确定你的提示占用了多少屏幕空间(因此实际命令行的起始位置),你必须将提示的非打印部分括起来\[...\].大多数情况下,这意味着\e[1;30m需要编写的转义序列\[\e[1;30m\].你的提示中有一些\[\]你的,但他们在错误的地方,这使得bash非常困惑.找到与您一样复杂的提示的所有打印和非打印部分并非易事,但我认为这是正确的:

export PS1='\[\e[1;30m[\e[\e[1;30m\e[1;33m\] \u@\H \[\e[1;32m\]\w\[\e[0m\] \[\e[1;30m\]]\n[ \[\e[1;31m\]\T\[\e[0m\e[1;30m\] ] > \[\e[37m\]'
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的问题,感谢您指出您需要将非打印部分包含在 `\[` ... `\]` 中 (3认同)