编辑init.el / .emacs的快捷键

4

我对Lisp完全是个新手,所以请谅解我的不足。

我认为最好的学习方法就是深入研究。因为我正在设置我的Emacs环境,我会经常编辑我的init.el文件,所以我想添加一个快捷键来快速找到它进行编辑,因为在接下来的几周中我会经常需要它。

我尝试了:

(global-set-key [f7] '(find-file "~/.emacs.d/init.el"))

徒劳无功,下一次按下时的答案是:

Wrong type argument: commandp, (find-file "~/.emacs.d/init.el")

我还尝试将它放入一个自己的函数中,模仿一个有效的热键(例如Deft的(global-set-key [f8] 'deft)):

(defun sz-init-el ()
  (interactive)
  (find-file "~/.emacs.d/init.el"))
(global-set-key [f7] 'sz-init-el)

那样做起作用了。因此,我尝试在我的第一次尝试中添加(interactive)

(global-set-key [f7] '((interactive) (find-file "~/.emacs.d/init.el")))

但这样不起作用(再次强调:Wrong type argument: commandp, ...)。

那么,有没有一种方法可以在不先定义函数/命令的情况下设置全局键绑定?还是我必须通过defun来实现呢?

感谢您的帮助和答案!

1个回答

5
您需要使用lambda(也称为匿名函数):
(global-set-key [f7] (lambda () (interactive) (find-file user-init-file)))

此外,使用变量user-init-file比硬编码名称更可取。

谢谢,很有道理(我从Python中了解了lambda)。特别感谢user-init-file指针! - A Sz
4
对于 Lisp 程序员来说,说“我懂 Python 的 Lambda 表达式”就像对海鸥说“我懂企鹅的翅膀”一样。 :-) - sds
@sds:我的意思是我对匿名函数有基本的理解,虽然不知道elisp的语法,可能不会立即清楚为什么需要它,但我理解其语法,不需要进一步澄清lambda是什么。但我明白你的观点。 - A Sz
FYI,最好不要引用lambda表达式。请参见https://dev59.com/8nrZa4cB1Zd3GeqP9Pbx - phils

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