在 bash 中按箭头键进行反向历史记录搜索会导致光标显示在错误的位置

在 bash 中按箭头键进行反向历史记录搜索会导致光标显示在错误的位置

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

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

有谁知道这是什么原因造成的或者如何解决它?

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

答案1

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

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

另请参见下面 alexander-somov 的回答,其中找到了一种解决此问题最常见原因的方法。

答案2

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

确保将它们全部像这样括起来:

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

相关内容