在 bash 中反向历史搜索后跟箭头键会导致光标显示在错误的位置

jon*_*rry 10 bash

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

这会造成困难,因为光标的实际位置与屏幕上呈现的不同;对命令的未来编辑呈现为就好像光标位于它跳转到的位置一样,但实际命令保留了正确的位置而没有任何跳转。

有谁知道是什么导致了这个或如何解决它?

编辑:如果我PS1在问题末尾添加换行符似乎会消失。但是,我更愿意在与提示相同的行中输入命令。

小智 14

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

确保像这样将所有这些都包含在内:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

  • 更好的是:如果重新绘制当前线,问题似乎就会消失。Cl 可以清除屏幕并重绘当前行,或者为未绑定函数 redraw-current-line 创建键绑定。 (2认同)