在vi模式下进行Bash:使用上/下光标浏览shell历史记录,光标位置不在末尾?

时间:2009-05-10 07:16:30

标签: bash vim emacs history

我非常喜欢vim,并且真的希望用vi-mode增强我的bash体验。然而,有一件事我习惯于emacs的行为,当用光标向上/向下浏览shell历史时,光标位于行的末尾

在vi模式中,它是另一种方式;光标始终位于行的开头。在emacs模式中使用bash太长时间,在大脑中真的被烧死了,期望光标在最后。

在浏览shell历史记录时,有没有机会在bash vi-mode的行尾默认获取光标位置?

2 个答案:

答案 0 :(得分:5)

您需要重新映射上下游标:

bind -m vi-command '"\201": previous-history'
bind -m vi-command '"\202": next-history'
bind -m vi-command '"\203": end-of-line'
bind -m vi-command '"\e[A": "\201\203"'
bind -m vi-command '"\e[B": "\202\203"'

这会将上一个历史记录,下一个历史记录和行尾结束映射到不存在的键,然后向上和向下映射到这些字符的序列。如果你愿意,你可以为j / k做同样的事情,但我建议你不要管它们。这样你就可以做到这两点。

这仅在您处于命令模式时重新映射键。在我的机器上,光标已经在插入模式的行尾。如果你不是这样,你可以使用vi-insert代替vi-command作为键映射。

答案 1 :(得分:4)

我不知道如何解决bash(或readline内部的历史代码重新编码的问题。

然而,一旦你发现你的行开始追加到最后,真的难以输入Shift-A吗?

如果你打算放弃emacs模式,那么在某些时候,你将不得不完全做到并接受vi做事的方式。加入我们,你知道你想: - )