命令行上的文本输入不匹配 PS1

Text input on command line does not match PS1

我设置了自定义PS1来扩展当前目录。这很好用,但是,文本输入与 PS1 长度不匹配。输入不是我在 PS1 末尾设置的“>”,而是从行首开始只有大约 10 个字符。只有当我在命令行上输入大量文本时才会发生这种情况(尤其是回忆以前的长命令或粘贴)。如果文本很短,一切正常。

很多其他奇怪的事情也会发生,最常见的是当输入的命令需要换行符时。

我在配置 .bashrc 时是否遗漏了什么?

这是我的PS1。 'CurDir' 是我设置的一个变量,用于打印出当前目录(如果小则为 PWD,如果较长则为剪切版本)。大多数颜色来自其他人。只有 'CurDir' 是我添加的,并且在 .bashrc 中较早设置。

PS1='\e[1m\[\u@\h \]\e[0;36m\[$CurDir\]\e[m>'

您转义了错误的部分:\[...\] 用于包装提示的 未打印的 部分。

你的转义:

PS1='\e[1m\[\u@\h \]\e[0;36m\[$CurDir\]\e[m>'
            └─┬──┘            └──┬──┘
            escaped            escaped

转义未打印的部分:

PS1='\[\e[1m\]\u@\h \[\e[0;36m\]$CurDir\[\e[m\]>'
       └─┬──┘         └───┬──┘           └─┬┘
       escaped        escaped             escaped

这假定 $CurDir 中没有终端转义码。