我想查看 Emacs 中现有函数的定义。可以吗?
我已尝试过C-h d function-name RET
,但它只返回函数的文档字符串,而不是实际函数本身。
我正在考虑类似于 bash 的type
命令,它将返回函数的完整定义。
(令人尴尬的背景故事:我无意中.emacs
用一个不起作用的版本覆盖了我的文件中一个正常工作的函数。原始函数仍在内存中!而且它可以工作!但我不能生活我记得我是怎么做的。
答案1
如果您输入C-h f function-name RET
,您将获得该函数的文档,如果可用,还会获得指向函数源的链接。
我认为没有一个简单的 Lisp 函数可以调用来检索函数源的位置;查找与帮助系统的其余部分紧密相连。find-lisp-object-file-name
是试图找出函数源位置的主要函数。
除非function-name
是原语(在 Emacs 的 C 源代码中定义),否则您可以使用(symbol-function 'function-name)
或更一般的方式(间接函数 '函数名)查看其代码。但是,如果该函数是字节编译的,那么您看到的只是其字节码。
答案2
M-x find-function
返回该点附近的函数定义。
来自文档:
在缓冲区中查找包含点附近函数定义的源文件(由“function-called-at-point”选择),并将点放在定义之前。如果缓冲区已经存在,则在移动之前设置标记。
如果您还想包含用 C 实现的函数,则必须将以下内容添加到您的 .emacs 文件中:
(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir"))