【问题标题】:In Emacs, how can I jump between functions in the current file?在 Emacs 中,如何在当前文件中的函数之间跳转?
【发布时间】:2010-01-25 04:34:09
【问题描述】:

我想快速将点移动到我的 Emacs 缓冲区中的一个函数。我想运行一些函数并得到一个提示,询问我函数名称,并为当前缓冲区中定义的每个函数提供完成。

我通常使用 etags 进行导航,但有时我正在寻找一种已在多个文件中被覆盖的框架方法。在这些情况下,我可以找到我需要的文件,但我想快速跳转到那里的函数。 TextMate 中有一个类似的功能,您可以从编辑器右下角的列表中选择定义。

【问题讨论】:

    标签: emacs


    【解决方案1】:

    只是为了跳转当前文件中的函数?使用imenu。它是迄今为止列出的所有替代方案中最简单和最轻的,可能足以满足您的需求。它还内置在 Emacs 中,并且设置麻烦最少。它具有图形和文本界面。任何额外的,您最好使用此处提出的其他优秀建议之一。

    【讨论】:

    • 支持哪些语言? C 家族和 Elisp,还有什么?
    • 我认为大多数内置模式都适用于 imenu。将 imenu 支持添加到模式也很容易。它适用于 Python 和 Cperl 模式。我用过那些。
    【解决方案2】:

    speedbar 是标准的,它为当前目录中的每个文件提供了一个可折叠菜单,默认情况下,中间单击函数定义的条目会跳转到该定义。在 emacs23 中,这被更改为更正常的左键。

    【讨论】:

      【解决方案3】:

      您可以使用etags-select 从多个匹配标签中进行选择。但你问的答案是imenu

      【讨论】:

        【解决方案4】:

        Icicles 可能更接近您正在寻找的内容:

        http://www.emacswiki.org/emacs/Icicles_-_Tags_Enhancements

        这是对 etags 的增强,并且包括(除其他外)带有标签的文件名,因此您可以判断它是否是您要查找的文件。

        【讨论】:

          【解决方案5】:

          试试 CEDET。设置第一个有点困难,但这里有一个很好的教程:by Alex ott

          当他安装好后,你可以使用semantic-complete-jump。按下标签几次,它也带来了符号定义。

          【讨论】:

          • Semantic 也与任何东西有很好的集成,anything-c-source-semantic 源提供了通过语义找到的所有内容的列表。
          【解决方案6】:

          如果 M-。调错方法,可以输入C-u M-。找到下一个同名的。

          【讨论】:

            【解决方案7】:

            global gtags 很不错

            【讨论】:

              【解决方案8】:

              要在当前文件或您选择的一组文件中导航,您确实需要 TAGS 文件。您可以使用 Imenu。但最好使用Icicles imenu 命令。

              为什么?因为他们让你使用completion。子字符串、正则表达式、前缀或模糊完成。组合简单的模式以匹配或减去它们。

              命令icicle-imenuIcicle 模式下绑定到C-c =。但是您也可以使用命令icicle-imenu-commandicicle-imenu-non-interactive-function 仅查找命令非命令 函数(非交互式)。

              这些命令是多命令,这意味着它们实际上是浏览器:您可以使用键 C-RETC-mouse- 在函数定义之间跳转2(直接跳转)和C-down(循环)。点击 RET 或点击 mouse-2 以在最终目的地安顿下来。

              【讨论】:

                【解决方案9】:

                我使用C-M-aC-M-e 在函数的开头和结尾之间跳转。

                否则,打开Speedbar 并单击文件名旁边的+ 图标以查看文件中包含的函数列表。然后点击函数名直接跳转。

                【讨论】:

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