【发布时间】:2023-04-04 09:25:01
【问题描述】:
我的两个选择是
绑定前定义函数
例如:
(defun select-all ()
(interactive)
(mark-whole-buffer))
然后绑定它:
(global-set-key (kbd "C-a") 'select-all)
绑定匿名函数
一次性定义和绑定:
(global-set-key (kbd "C-a")
(lambda ()
(interactive)
(mark-whole-buffer)))
我的问题
如果我一次性定义和绑定,对性能有影响吗?
参考文献
emacswiki.org - InteractiveKeybinding 似乎告诉我们这是可以接受的。
【问题讨论】:
-
是
global-set-key,不是global-key-set。性能上没有区别。如果是为你自己而你不关心C-h k查找键绑定并跳转到源代码,那么无论哪种方式都可以。如果有一天您希望创建一个其他人将使用的库,那么您肯定需要第一种方法。如果您查看一些流行的库,您会发现没有人使用第二种方法。尝试使用C-h k自己查找键绑定,并亲自查看差异。 -
我认为给函数起一个名字是值得的,这样
C-h k会给你一些有用的东西。如果给出一个键绑定足够重要,那么命名可能也足够重要。 -
顺便说一句,
mark-whole-buffer已经是交互式的,因此没有理由定义包装函数。你可以(defalias 'select-all 'mark-whole-buffer)给它一个别名。