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
这样,无论您从哪里开始emacs
或vi
,按下两者jk
都会使您进入 vi 命令模式在该行的开头。
此外,它允许您使用-切换到emacs
模式。Esce