4

我正在使用 Colemak 键盘布局,并想从这里使用 Vimpulse 尝试 Vim 布局。然而,布局重新映射命令前缀 Vim 键 'c' 和 'd' 等,这些键似乎不容易用标准 Viper 键重新映射命令重新映射。它们都映射到 viper 键盘映射中的“viper-command-argument”,实际的键功能似乎在 Viper 源的其他地方定义。

有没有比复制我的 Viper 源的本地副本并在其中重新定义魔术前缀键值更简单的方法来将前缀命令重新绑定到其他键?

4

2 回答 2

2

Viper 模式命令前缀键是通过两组间接设置的。您找到了第一个,因为所有命令键都绑定到'viper-command-argument. 接下来要做的是在变量中查找viper-exec-array。目前设置如下:

(aset viper-exec-array ?c 'viper-exec-change)
(aset viper-exec-array ?C 'viper-exec-Change)
(aset viper-exec-array ?d 'viper-exec-delete)
(aset viper-exec-array ?D 'viper-exec-Delete)
(aset viper-exec-array ?y 'viper-exec-yank)
(aset viper-exec-array ?Y 'viper-exec-Yank)
(aset viper-exec-array ?r 'viper-exec-dummy)
(aset viper-exec-array ?! 'viper-exec-bang)
(aset viper-exec-array ?< 'viper-exec-shift)
(aset viper-exec-array ?> 'viper-exec-shift)
(aset viper-exec-array ?= 'viper-exec-equals)

所以,如果你想让密钥t像删除命令一样,你需要以下两件事:

(aset viper-exec-array ?t 'viper-exec-delete)
(define-key viper-vi-basic-map "t" 'viper-command-argument)

(大概你会从t某个地方重新绑定动作,说c关键:

(define-key viper-vi-basic-map "c" 'viper-goto-char-forward)

最后,您必须修改例程'viper-prefix-arg-com,我不会假装完全理解。话虽如此,如果您将所有 替换为?c?tt绑定按预期工作。(或者,您可以添加?t使用相同的方式?c- 这也有效)。我会提供源代码,但它有 100 行长,而且不值得在这里包含(这是一个 4 个字符的变化)。您可以通过执行M-x find-function viper-prefix-arg-com.

长话短说,如果您想对 viper 的密钥进行大规模重新绑定,这将是一项相当大的工作,您将更加熟悉 viper 源代码。

'viper-prefix-arg-com编码的方式,如果不重新定义它,你就无法做出你想要的改变。viper-mode 实现的可能还有 3 或 4 种其他不同类型的 vi 命令(这个是“命令参数”)。其他人希望更直接地重新绑定......

于 2010-01-27T16:20:39.183 回答
1

It looks like Evil-mode supports remapping even the command prefix keys. I'll use that instead.

于 2011-12-19T19:47:41.757 回答