有没有办法在 Emacs 中打印现有函数的定义?

有没有办法在 Emacs 中打印现有函数的定义?

我想查看 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"))

相关内容