【问题标题】:Emacs: how to jump to function definition in .el file?Emacs:如何跳转到 .el 文件中的函数定义?
【发布时间】:2011-05-12 10:52:21
【问题描述】:

我试图编辑我的初始化文件。有什么方法可以快速跳转到已经加载/需要的其他 .el 文件的函数定义?

我记得这样做过一次,但不记得如何...

【问题讨论】:

    标签: emacs


    【解决方案1】:

    M-x find-function RET (function name) RET

    我发现 C-h C-ffind-function 提供了很好的键绑定(假设 C-h f 默认绑定到 describe-function

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

    【讨论】:

    • 这仅适用于已加载的函数,或设置为自动加载的函数。
    • 确实如此,但鉴于该问题专门针对已加载的 elisp 函数,而且它不需要生成 TAGS 文件的额外步骤,这似乎是最佳答案。
    • 我刚刚有这个确切的问题,非常感谢。我还发现还有find-function-at-point(至少在emacs 23 中)。我将它绑定到 C-h C-f 并且效果很好!
    • 一些类似有用的函数是:find-function-on-keyfind-variablefind-library
    • 如果您不想将其作为全局热键,但仅限于 emacs-lisp 主要模式:(add-hook 'emacs-lisp-mode-hook (lambda () (local-set-key (kbd "M-.") 'find-function-at-point)))
    【解决方案2】:

    As of emacs-25.1,有一个新的通用函数xref-find-definitionsxref 内置包提供了一个用于在代码中导航定义的通用 框架。可能每种模式都需要一些时间来调整这个框架的自定义功能,但至少,emacs-lisp-mode 已经移植了。

    【讨论】:

    • 太棒了! find-function-at-pointAFAIK 并没有相反的东西,这真的让我很恼火。现在它按我想要的方式工作! (xref-find-definitions 的倒数是xref-pop-marker-stack
    • 不幸的是,它不适用于从 .el.gz 文件生成的标签文件。
    • @RichieHH 你确定 ctags/etags 支持索引 .el.gz 文件吗?出于好奇,我只是使用任意 elisp 文件 add-log.el.tar.gz 创建了一个目录,当我执行 ctags -eR .etags add-log.el.tar.gz 时,生成的 TAGS 文件没有定义。
    【解决方案3】:

    etags [options] file1 file2 ...,然后从 emacs 内部执行 M-. 以访问标签。要转到标签的下一个匹配项,请执行M-,

    【讨论】:

    • 你可能指的是M-. :) 不是M-x .
    【解决方案4】:

    find-function 是要走的路。另一种方法是使用 C-h f,然后单击缓冲区*Help* 中的文件名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2010-10-12
      相关资源
      最近更新 更多