用bash反向历史记录搜索,然后按箭头键会导致光标显示在错误的位置


10

我注意到很多次,当我通过CTRL+ 从命令行进行反向历史搜索时r,如果要编辑命令,有时在按箭头键或输入CTRL+ aCTRL+ 时光标会跳到错误的位置e。它跳转到的特定位置似乎是一个偏移量,该偏移量等于中设置的命令行提示符的大小PS1

由于光标的实际位置与屏幕上显示的位置不同,因此会产生困难。将来对命令的编辑将呈现为光标所在的位置,但实际命令将保留正确的位置,而不会发生任何跳转。

有谁知道这是什么原因或如何解决?

编辑:如果我PS1在问题的末尾添加换行符似乎消失了。但是,我宁愿在提示的同一行输入命令。

Answers:


6

这通常是由您的历史记录中超过1行的命令引起的。当您从历史记录中选择一个较短的项目时,似乎在重新渲染命令行时并未考虑提示的宽度,因此该长命令之后的所有内容都是错误的。

我发现的简单解决方案是按home键,插入“ echo”并按Enter。然后调用最后一个命令并从那里进行编辑。(首先删除回声。


谢谢,实际上我刚刚尝试过。在我的情况下,我很粗心,炸掉了一个文件,因为命令中有一个管道吞没了回声。您是正确的,根据我的实验,这似乎只会影响长命令。
jonderry 2011年

比我刚刚发现的回声更好的解决方案:在行的开头加上“#”而不是回声。这样,bash会将整行视为注释。
jonderry 2011年

1
更好的是:如果重绘当前行,问题似乎就消失了。Cl可以清除屏幕并重绘当前行,也可以为未绑定的函数redraw-current-line创建按键绑定。
jonderry 2011年

我忘了提到Cl解决方案,因为我真的很讨厌丢失滚动缓冲区,但是,是的,这是历史导航中的一个临时渲染故障,因此强制重绘将解决此问题。重绘当前行听起来是一个更好的解决方案!
cabbey 2011年

13

也许PS1中有未打印的转义序列,但未包含在\ [和\]中。

请确保您将所有这些文件都这样封闭:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

1
如果只在\[和中包含非打印序列,则效果很好\](因此,您需要使用多组这些块引用)
Andomar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.