【问题标题】:Using Emacs for big big projects将 Emacs 用于大型项目
【发布时间】:2010-04-02 12:30:54
【问题描述】:

也许这是一个经常重复的问题,但我找不到与搜索类似的任何内容。 关键是我喜欢将 Emacs 用于我的个人项目,通常是使用 C 或 python 的非常小的应用程序,但我想知道如何将它也用于我的工作,其中我们有大约 10k 源代码文件的项目,所以非常大(实际上我正在使用源洞察力,这是一个非常好的工具,但仅适用于 Windows),问题是:

  • 搜索:在整个项目中搜索字符串最方便的方法是什么?
  • 在函数中导航:我的意思是将光标放在函数上、define、var 并转到定义
  • 重构

此外,如果您对此有任何经验并想分享您的想法,我会认为它非常有趣。

Br

【问题讨论】:

  • 大型项目是用什么语言编写的?还是 C 或 Python?
  • 完整的项目包括 C、C++、python、bash 脚本……但在我这边,我只是在修改 C 和 C++ 文件。

标签: search emacs editor project


【解决方案1】:

浏览 C 源文件的“传统”方式是使用“etags”创建一个名为 TAGS 的文件,然后使用 ALT-。跨文件访问函数。

为了在文件中搜索字符串,我通常使用“grep”。如果您厌倦了每次都输入它们,您可以使用所有要搜索的目录或其他东西制作一个 shell 脚本。

【讨论】:

  • 其实etags代表emacs标签,这只是exuberant ctags可以产生的格式之一。当使用名称 etags 调用 exuberant ctags 时,它会生成 emacs 格式的标记文件。当使用名称 ctags 调用它时,它会生成 ctags 格式文件。当然,您也可以通过命令行选项来控制使用哪种格式,而不管用于调用该工具的名称。
  • 非常有趣,任何关于更方便地使用 grep 的特殊提示,我的意思是我发现每次输入 grep 选项和搜索路径都很慢
  • 好的,我删除了关于旺盛的部分。
【解决方案2】:

我的项目通常存在于 git 中,因此我将其放在一起以快速搜索它们:

;; There's something similar (but fancier) in vc-git.el: vc-git-grep
;; -I means don't search through binary files
(defcustom git-grep-switches "--extended-regexp -I -n --ignore-case"
  "Switches to pass to `git grep'."
  :type 'string)

(defun git-grep (command-args)
  (interactive
   (list (read-shell-command "Run git-grep (like this): "
                             (format "git grep %s -e "
                                     git-grep-switches)
                             'git-grep-history)))
  (let ((grep-use-null-device nil))
    (grep command-args)))

【讨论】:

  • 如果有人正在阅读这篇文章并且在 git 中没有他们的项目,我发现 ack 在搜索代码方面比 grep 更好。它的搜索速度没有那么快(尽管在相当大的代码库上它并没有慢多少),但是输入“ack blah”比输入“find . -name ".cc" -o -name " i>.h" -exec grep blah {} \;" :-)
  • 用 M-x tags-search 代替 grep 怎么样?
  • M-x tags-search 的问题是你必须先创建一个TAGS文件,有时这很困难。例如,我认为 etags 不会对 Visual Studio 构建文件做任何明智的事情,但我也想搜索这些。
【解决方案3】:

还有 Emacs 代码浏览器。它使探索项目变得更加简单。请参阅herehere 了解更多信息。

【讨论】:

    【解决方案4】:

    关于整个项目的搜索,我发现 rgrep 命令非常有用。

    此外,imenu 可以非常方便地跳转到同一文件中的函数定义。

    这些是我的 2p。

    【讨论】:

      【解决方案5】:

      看看 CEDET 的 EDE - 它为项目提供基础支持...

      【讨论】:

        【解决方案6】:

        欧洲央行对我来说太重了。我在 xcscope 上取得了不错的成绩。不用说它对 Python 帮助不大。

        http://www.emacswiki.org/emacs/CScopeAndEmacs

        【讨论】:

          【解决方案7】:

          除了其他人提到的使用 TAGS 之外,我发现 igrepigrep-find 非常有用。还有Emacs的内置grepgrep-find,但是我觉得他们的界面比较笨拙。

          我的标准搜索是:

          M-x igrep-find some_regexp RET ~/work_area/*.cxx
          

          它将查找~/work/area 下的所有*.cxx 文件,并显示匹配some_regexp 的结果。与所有搜索实用程序一样,它填充了一个类似编译的缓冲区,您可以使用 C-x `(又名 M-x next-error)导航。

          【讨论】:

            【解决方案8】:

            Icicles 可以通过多种方式提供帮助 projects。同样,Bookmark+ 甚至 Dired+

            这些库可以帮助您创建、组织和管理项目,无论它们的文件和目录可能位于何处。它们可以帮助您以各种方式导航和搜索。

            其中一些功能是独一无二的——与其他方法完全不同。我可以在这里列出一些项目支持,但这是start 的最佳位置。

            【讨论】:

              猜你喜欢
              • 2012-05-31
              • 2013-02-23
              • 1970-01-01
              • 2018-06-10
              • 1970-01-01
              • 1970-01-01
              • 2011-07-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多