我在 bash 中使用了 PS1 和 PROMPT_COMMAND 来创建一个 zsh 风格的右侧提示。我有一个几乎有效的解决方案。
问题是,如果我写了一长行输入,第二行会覆盖第一行。第三行将很好地出现在新行上。
也许由于我的光标移动,某些行计数器是一对一的,还是这是一个限制/错误?
一个简单的例子:
export PS1="prompt>\[\033[s\033[10C\]test\[\033[u\]"
Run Code Online (Sandbox Code Playgroud)
打印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
Run Code Online (Sandbox Code Playgroud)
示例 2,当前行为:
------------------------------------
prompt> test
prompt>ls test
files...
14 15 16 17 18 19 20 21 22 23 24 253
26 27 28
Run Code Online (Sandbox Code Playgroud)
啊,当然。测试不应被视为可见字符,而应包含在\[和之间\]。
工作示例:
export PS1="prompt>\[\033[s\033[10Ctest\033[u\]"
Run Code Online (Sandbox Code Playgroud)
原因是因为如果 bash 将 test 作为可见字符进行计数,则如果光标和当前行上剩余可用字符的计算将关闭四个字符('test' 的长度),它将假定它是左边的。
| 归档时间: |
|
| 查看次数: |
2793 次 |
| 最近记录: |