【发布时间】:2012-04-06 18:42:54
【问题描述】:
在定制我的.emacs 文件几年后,我发现我使用了两种不同的
设置主要模式特定键绑定的各种构造:
1. 使用钩子和local-set-key。例如:
(defun my/bindkey-recompile ()
"Bind <F5> to `recompile'."
(local-set-key (kbd "<f5>") 'recompile))
(add-hook 'c-mode-common-hook 'my/bindkey-recompile)
我想说这种结构可以很容易地使用相同的键绑定 通过向所有相关的主模式添加相同的功能来不同的主模式 钩子(换句话说,“我想要哪些键绑定”明显分开 来自“我想要它们的模式”)。但是,我不习惯 事实上,这种定制是在缓冲区级别完成的,而我会 认为它们属于主要模式。
2. 使用define-key(通常与eval-after-load结合使用来延迟
评估,直到加载相关的键盘映射)。例如:
(eval-after-load "cc-mode"
'(progn
(define-key c-mode-map (kbd "C-c o") 'ff-find-other-file)
(define-key c++-mode-map (kbd "C-c o") 'ff-find-other-file)))
相比之下,这个结构自定义了主模式本身,但更少
灵活:如果我想为另一种模式使用相同的键绑定,我将有
找到此模式的正确文件和键盘映射名称,并且几乎重复
eval-after-load 表达式(虽然这可能是自动化的
一个函数/宏)。
问题:虽然这两种构造类型都能很好地工作并产生结果,但我 想要,它们在技术上非常不同,设置键绑定 不同时间的不同键盘映射。所以我的问题是:在这两个中 构造,是否有“首选/更好”的做事方式? (或者也许是“最好的” 构造是我不知道的第三个?)
“首选/更好”是指:
- 较不容易被新的 emacs 版本破坏
- 不易受到主动次要模式的干扰/干扰
- 更惯用/可读/可与他人分享
【问题讨论】:
-
多年后我发现了同样的事情,当我尝试创建一个处理 minibuffer 窗口的主要模式时,它有自己的键表并且在哪里是强制性的
local--。