![将 Bash 的 vi 模式默认为“正常”Vi 模式(不是“插入”),并将光标置于行首,模仿 KornShell](https://linux22.com/image/90133/%E5%B0%86%20Bash%20%E7%9A%84%20vi%20%E6%A8%A1%E5%BC%8F%E9%BB%98%E8%AE%A4%E4%B8%BA%E2%80%9C%E6%AD%A3%E5%B8%B8%E2%80%9DVi%20%E6%A8%A1%E5%BC%8F%EF%BC%88%E4%B8%8D%E6%98%AF%E2%80%9C%E6%8F%92%E5%85%A5%E2%80%9D%EF%BC%89%EF%BC%8C%E5%B9%B6%E5%B0%86%E5%85%89%E6%A0%87%E7%BD%AE%E4%BA%8E%E8%A1%8C%E9%A6%96%EF%BC%8C%E6%A8%A1%E4%BB%BF%20KornShell.png)
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