我正在尝试学习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模式正常工作。
感谢您的帮助...
答案 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包有很多帮助。