Bash 覆盖第一行,PS1 bash 提示符

Bash 覆盖第一行,PS1 bash 提示符

我在 bash 中使用 PS1 和 PROMPT_COMMAND 来创建 zsh 风格的右侧提示符。我有一个解决方案几乎作品。

问题是,如果我写一长行输入,第二行会覆盖第一行。第三行将很好地出现在新行上。

也许某些行计数器由于我的光标移动而被减一,或者这是一个限制/错误?

一个简单的例子:

export PS1="prompt>\[\033[s\033[10C\]test\[\033[u\]"

打印prompt>,保存位置,向左移动10个字符,打印test,恢复位置。

提示看起来不错并且工作完美,直到我写了不止一行文本。

示例 1,预期行为:

------------------------------------
prompt>          test
prompt>ls        test
files...
prompt>1 2 3 4 5 6 7 8 9 10 11 12 13
14 15 16 17 18 19 20 21 22 23 24 25
26 27 28

示例 2,当前行为:

------------------------------------
prompt>          test
prompt>ls        test
files...
14 15 16 17 18 19 20 21 22 23 24 253
26 27 28

答案1

啊,当然。测试不应被视为可见字符,并且应包含在\[和之间\]

工作示例:

export PS1="prompt>\[\033[s\033[10Ctest\033[u\]"

原因是因为如果 bash 将 test 计为可见字符,则如果光标和当前行上剩余的可用字符的计算将偏离四个字符(“test”的长度),则它会假设它已离开。

相关内容