我在 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”的长度),则它会假设它已离开。