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

mar*_*ark 3 vim emacs bash history

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

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

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

pax*_*blo 5

我不知道有什么方法可以在bash(或者readline,真的)内部重新编码历史代码。

但是,一旦您找到要在末尾追加的行,就真的很难输入Shift-A吗?

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

  • ESC 是一种更强大的使用方式,因为您可以执行诸如 <ESC>/find<ENTER> 之类的操作来获取最后一个“查找”命令,然后使用 n 继续搜索。ESC-k 只是获取最后一条命令的快捷方式,它是 ESC 本身让您进入 vi 模式,并提供几乎完整的 vi 命令库。 (3认同)

Pia*_*rus 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作为键映射来执行相同的操作.