Bash 的 vi 模式中的“vi-move”键盘映射实际上起什么作用?

Bash 的 vi 模式中的“vi-move”键盘映射实际上起什么作用?

中的键盘映射部分Bash 参考手册说可接受的选项之一是“vi-move”。似乎没有任何描述说明这对应于什么。我熟悉“vi-command”和“vi-insert”,但似乎找不到有关“vi-move”的任何信息。

我曾希望问题会阐明一些事情,但没有这样的运气。

答案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显示是vivi-insert取决于我是通过键入它来调用 bash -V 还是通过点击Esc k CR来重播历史记录。

答案3

vi-movevi-commandvi同义词同一个键映射(由@memeplex 证明),并且是由vi-movement-mode命令设置为活动的键映射。

通过命令 或 将键vi-insert映射设置为活动状态。editing-mode viset -o vi

请注意,在bashv4.3.11(1) 中,vi-movement-mode如果emacs键盘映射处于活动状态,则执行命令不会更改提示符(如果show-mode-in-prompt为 )on,但更改为vi-editing-mode则会更改提示符。解决方法是这里

相关内容