Emacs:如何跳转到.el文件中的函数定义?

55

我尝试编辑我的init文件。有没有可能快速跳转到已经加载/需要的其他.el文件的函数定义?

我记得曾经做过这件事,但不记得具体方法了...

4个回答

64

M-x find-function RET (函数名称) RET

我发现C-h C-f是一个很好的绑定键用于调用find-function(因为默认情况下C-h f被绑定到describe-function

(global-set-key (kbd "C-h C-f") 'find-function)


这仅适用于已加载的函数或已设置为自动加载的函数。 - Trey Jackson
确实如此,但考虑到问题特别涉及已加载的elisp函数,并且不需要生成TAGS文件的额外步骤,这似乎是最佳答案。 - phils
2
我刚好有这个问题,非常感谢。我还发现在emacs 23中也有find-function-at-point。我将其绑定到C-h C-f上,效果很棒! - Upgradingdave
2
一些同样有用的函数包括:find-function-on-keyfind-variablefind-library - phils
如果你不想将其作为全局热键,而是仅在 Emacs Lisp 主模式中使用:(add-hook 'emacs-lisp-mode-hook (lambda () (local-set-key (kbd "M-.") 'find-function-at-point))) - hraban

9

从 Emacs-25.1 版本起,增加了一个新的通用函数 xref-find-definitions。内置的 xref 包提供了一个通用的框架,用于浏览代码中的定义。可能需要一些时间来调整每种模式自定义函数以适应此框架,但至少 emacs-lisp-mode 已经移植。


1
太棒了!据我所知,find-function-at-point 没有反向功能,这真的让我很烦恼。现在它按照我想要的方式工作了!(xref-find-definitions 的反向功能是 xref-pop-marker-stack - Blake Miller
不幸的是,它无法与从.el.gz文件生成的标签文件一起使用。 - RichieHH
@RichieHH,你确定ctags/etags支持索引.el.gz文件吗?出于好奇,我只是创建了一个包含任意elisp文件add-log.el.tar.gz的单个目录,当我执行ctags -eR .etags add-log.el.tar.gz时,生成的TAGS文件没有定义。 - Hi-Angel

5

etags [选项] 文件1 文件2 ... 然后,在emacs中,执行M-.来访问标签。要跳转到标签的下一个出现位置,请执行M-,


2
你可能是想说 M-. 而不是 M-x . :) - VitoshKa

4

find-function 是一个不错的选择。另一种方法是使用 C-h f,然后在缓冲区 *Help* 中单击文件名。


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