答案1
diff <(bind -p -m vi-move) <(bind -p -m vi-command)
没有显示任何差异,所以我猜它们只是同义词。然而,readline 文档只指出 vi 和 vi-command 是等效的,尽管它在同一段中提到了 vi-mode,但它未能断言这三种模式之间的等效性。所以,我问过 Chet Ramey,他的权威回答是“是的 [这三种是相同的]”。
答案2
在本地搜索 bash 手册,字符串“vi-move”出现在 VI 模式绑定部分:
VI Mode bindings
VI Insert Mode functions
"C-D" vi-eof-maybe
... <snip>
"C-[" vi-movement-mode
...
这样做vim
表明:help ^[
:
i_CTRL-[ i_<Esc>
<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish
abbreviation.
Note: If your <Esc> key is hard to hit on your keyboard, train
yourself to use CTRL-[.
这只是从插入模式切换到普通模式的转换键,所以我认为vi-move
基本上是 vim 中的“普通”模式。不过,我不确定它如何映射到 Bash 中有用的东西。我的keymap
显示是vi
或vi-insert
取决于我是通过键入它来调用 bash -V 还是通过点击Esc k CR
来重播历史记录。
答案3
vi-move
和vi-command
是vi
同义词同一个键映射(由@memeplex 证明),并且是由vi-movement-mode
命令设置为活动的键映射。
通过命令 或 将键vi-insert
映射设置为活动状态。editing-mode vi
set -o vi
请注意,在bash
v4.3.11(1) 中,vi-movement-mode
如果emacs
键盘映射处于活动状态,则执行命令不会更改提示符(如果show-mode-in-prompt
为 )on
,但更改为vi-editing-mode
则会更改提示符。解决方法是这里。