Emacs define-key,Viper-mode键绑定

3
我想学习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)

对我来说不起作用...事实上,我甚至不确定是否拥有“define-key”函数...

M-x define-key [No match]

我不确定我的emacs版本是否支持“define-key”?
这个可以用,但在viper模式下无法使用。
(global-set-key "n" "j")

非常感谢您的帮助。这是我第一天使用Emacs,为了使Colemak和Viper-mode正常工作,我感到很痛苦。

感谢任何帮助...

2个回答

5

希望以下回答对您有所帮助:

首先,在.viper中添加该行对我来说有效。请注意,viper-vi-global-user-map仅适用于命令模式,而不是插入模式。

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

第三,global-set-key是一个命令,您可以尝试使用M-x global-set-key进行更改。但是,它将在当前全局映射中设置键,这与viper-vi-global-user-map不同。Viper-mode使用许多不同的按键映射使Emacs的行为类似于vi,但所有映射都叠加在全局映射之上。

我猜您发现在插入模式下未绑定C-v按键。这可以通过将以下内容添加到您的.viper文件中来解决:

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

最后,scroll-down 可能不是您想要的。其中的 down 指的是文本向下移动(在固定窗口的视角下)。通常会将 C-v 绑定到 'scroll-up。但是,也许正是您想要的。
注意:我不是 viper-mode 用户,我甚至不知道如何使用 vi。因此,我的术语可能有误。但我发现更改 viper-mode 中的事物非常有趣。
编辑以添加:
根据您的评论,听起来您希望 n 与默认情况下绑定到 j 的内容相同。尝试添加以下内容:
(define-key viper-vi-global-user-map "n" 'viper-next-line)

在“正常”模式下,我执行了M-x describe-key j,得知j绑定到'viper-next-line,上面的行将把n绑定到同一程序。对于您想要移动的其余绑定,请重复此操作。

嘿 Trey,感谢你详细的回答。:) 当你说“命令模式”时,是指插入模式的相反吗?Vim 将其称为正常模式。实际上,我希望它在正常模式(移动模式)下工作。 - Quang Van
我应该提供一个更现实的“define-key”示例,实际上我想在正常/移动模式下将“n”转换为“j”。但在插入模式下保持“n”不变。(这是因为“j”以及“h,k,l”是VIM移动控件的一部分,必须转换为Colemak的等效控件“n,h,e,i”) - Quang Van
@Quang 看看最新的添加。 - Trey Jackson
太棒了!谢谢。像预期的那样工作。 :) 可能从vim迁移到Emacs有些令人望而生畏。我一定会向任何感兴趣的人更新如何将Emacs与viper+colemak配合使用的基础键绑定。再次感谢Trey。 - Quang Van

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接