将 Bash 的 vi 模式默认为“正常”Vi 模式(不是“插入”),并将光标置于行首,模仿 KornShell

将 Bash 的 vi 模式默认为“正常”Vi 模式(不是“插入”),并将光标置于行首,模仿 KornShell

ksh当 shell 处于 Vi 命令行编辑模式时,我试图让 Bash 模仿 KornShell93 ( ) 的行为。

KornShell 默认为“Vi 正常模式”(又名“命令”模式),并且在向后浏览命令行历史记录时,它还会将光标置于命令行的最开头。这与 Bash 形成鲜明对比,Bash 使您处于“Vi 插入模式”并位于命令行末尾。

在对“Bash vi模式配置默认为命令模式”,它几乎得出结论,当启用 Vi 命令行编辑时,无法让 Bash 默认为“Vi 正常模式”。

这已经是五年多前的事了,我想知道从那以后情况是否有所改变?

那么自动将光标放置在命令行的开头又如何呢?有没有一些我不知道的 Readline 魔法可以帮助我解决这个问题?

shells/bash我正在使用OpenBSD 当前(2017 年 1 月)上从源代码(OpenBSD 端口)编译的 Bash 版本 4.4.5(1)-release 。

答案1

似乎没有足够的方法在命令行中插入 Esc。

虽然在vi-insert大多数alpha/numeric按键中都被使用。 Esc 距离很远,任何和弦(例如Alt-j(有效))似乎都比预期的更复杂。所以,有一种方法可以制作键转换为可配置的字符串。

该解决方法的工作原理是使用来自这个答案

只需将其添加到.inputrc

 set editing-mode vi
 set vi-ins-mode-string \1\e[6 q\2
 set vi-cmd-mode-string \1\e[2 q\2

 set keymap emacs
 "\ee": vi-editing-mode
 "jk": "\eejk"
 "kj": "\eejk"

 set keymap vi-insert
 "\ee": emacs-editing-mode
 "jk": vi-movement-mode
 "kj": vi-movement-mode

 set keymap vi-command
 "\ee": emacs-editing-mode

这样,无论您从哪里开始emacsvi,按下两者jk都会使您进入 vi 命令模式在该行的开头

此外,它允许您使用-切换到emacs模式。Esce

相关内容