Qua*_*Van 3 colemak emacs viper key-bindings viper-mode
我正在尝试学习 emacs,获取 vi 自定义键绑定。
使用Viper模式,重新绑定密钥的正确方法是什么?(我使用Colemak 键盘布局(而不是 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)
Run Code Online (Sandbox Code Playgroud)
它对我不起作用......事实上我什至不确定我是否有“define-key”功能......
M-x define-key [No match]
Run Code Online (Sandbox Code Playgroud)
我不确定我的 emacs 版本是否可以使用“define-key”?
这有效,但在 viper 模式下无效
(global-set-key "n" "j")
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激。这是我第一天使用 Emacs,让 Colemak 和 Viper 模式正常工作很痛苦。
感谢您的帮助...
希望这里有一些有用的答案:
首先,让这条线.viper对我来说是可行的。请注意,viper-vi-global-user-map当您处于命令模式而不是插入模式时适用。
其次,define-key它不是命令,而是常规函数,这意味着不能使用M-x. 有关该区别的更多详细信息,请参阅此Emacs wiki 页面。但这是一次很好的尝试。
第三,这global-set-key 是一个命令,您可以尝试使用进行更改M-x global-set-key。但是,这在当前全局映射中设置了键,这与viper-vi-global-user-map. Viper 模式使用一堆不同的键盘映射来使 Emacs 的行为类似于 vi,但所有映射都覆盖在全局映射之上。
我猜您发现C-v当您处于插入模式时,它并没有像您想要的那样绑定。这可以通过将其添加到您的来解决.viper:
(define-key viper-insert-global-user-map "\C-v" 'scroll-down)
Run Code Online (Sandbox Code Playgroud)
最后,scroll-down可能不是你想要的。指down的是文本向下移动(给定固定窗口的视角)。 C-v一般是绑定到'scroll-up. 但是,也许这正是您想要的。
警告:我不是 viper 模式用户,我什至不知道如何使用 vi。所以我的术语可能有问题。但我发现在 viper 模式下改变事物的挑战非常有趣。
编辑添加
从您的评论来看,您似乎希望与默认情况下绑定的n内容相同。j尝试添加这个:
(define-key viper-vi-global-user-map "n" 'viper-next-line)
Run Code Online (Sandbox Code Playgroud)
在“正常”模式下,我做了M-x describe-key j,这告诉我j绑定到'viper-next-line,并且上面的行将绑定n到相同的例程。对要移动的其余绑定重复此操作。