Emacs define-key,Viper-mode键绑定

时间:2010-10-28 16:20:14

标签: emacs key-bindings viper viper-mode colemak

我正在尝试学习emacs,获得vi自定义键绑定。

使用Viper模式,重新绑定密钥的正确方法是什么? (我正在使用Colemak keyboard layout(而不是qwerty)所以必须改变像n-> j这样的东西但是希望它能在viper模式下工作。

从GNU.org上的这个键绑定指南: http://www.gnu.org/software/emacs/manual/html_node/viper/Key-Bindings.html

它表示放入.viper文件的命令是:

(define-key viper-vi-global-user-map "\C-v" 'scroll-down)

它对我不起作用......事实上我不确定我的功能是“define-key”......

M-x define-key [No match]

我不确定我的emacs版本上是否有“define-key”?

这有效,但不适用于viper模式

(global-set-key "n" "j")

非常感谢任何帮助。这是我使用Emacs的第一天,让Colemak& amp; Viper模式正常工作。

感谢您的帮助...

2 个答案:

答案 0 :(得分:4)

希望这里有一些有用的答案:

首先,.viper中的那一行对我有效。请注意,当您处于命令模式时,viper-vi-global-user-map适用,而不是插入模式。

其次,define-key不是命令,它是常规函数,这意味着它不能使用 M-x 调用。有关该区别的更多详细信息,请参阅此Emacs wiki page。但这是一次很好的尝试。

第三,global-set-key 一个命令,您可以尝试使用 M-x global-set-key 进行更改。但是,这会设置current global map中的密钥,这与viper-vi-global-user-map不同。 Viper-mode使用一堆不同的键盘映射来使Emacs像vi一样运行,但是所有的地图都叠加在全局地图的顶部。

我猜你在 insert 模式下发现 C-v 没有像你想要的那样绑定。这可以通过将其添加到您的.viper

来解决
(define-key viper-insert-global-user-map "\C-v" 'scroll-down)

最后,scroll-down可能不是您想要的。 down指的是向下移动的文本(给定固定窗口的透视图)。 C-v 通常绑定到'scroll-up。但是,也许这正是你想要的。

警告:我不是viper模式的用户,我甚至不知道如何使用vi。所以我的术语可能会关闭。但我发现在viper模式下改变事物的挑战非常有趣。

已编辑添加

从你的评论中你可能希望 n j 默认绑定的相同。尝试添加:

(define-key viper-vi-global-user-map "n" 'viper-next-line)

在“正常”模式下,我做了 Mx describe-key j ,它告诉我 j 绑定到'viper-next-line,上面的行将绑定 n 到同一个例程。对要转移的其余绑定重复此步骤。

答案 1 :(得分:0)

在现代,evil-mode是emacs的vim仿真层,为了调整它的colemak,我的https://github.com/wbolster/evil-colemak-basics包有很多帮助。