具有大代码库的emacs中的标签

时间:2010-06-26 16:18:15

标签: emacs tags

我想知道人们在使用大型代码库(大约50000 cpp | .h | .cs文件)时如何在emacs中使用标签。我的一些同事使用索引工具(名称转义我),它在几秒钟内返回代码库中的所有结果。我似乎无法在emacs和标签上获得那种性能,但它基本上是相同的!

我尝试过的一些方法:

  1. 为整个存储库创建一个TAGS文件。这通常非常大并且通常很难使用(有时候太多的标签匹配)。
  2. 为cpp | h | cs创建单独的TAGS文件。如果我知道(大致(至少是将要使用的编程语言))我正在寻找的东西会更集中。
  3. 较小的标签文件存储库的一部分。当我非常确定该区域时,这些都很棒,但是管理费用很高。我通常会在需要时生成这些内容。
  4. 您的工作流程的任何建议\示例都表示赞赏。

4 个答案:

答案 0 :(得分:5)

这是我使用的脚本:

#!/usr/bin/bash
echo "Creating list of files to build tags..."
find `pwd` -name '*.c' -o -name '*.h' > cscope_files

echo "Building cscope and ctags databases..."
cscope -bqki cscope_files
ctags -eL cscope_files

> cat cscope_files | wc -l
10700

对于与您的项目相当的10700个文件,标签之间的跳转是即时的。正如您所知,这构建了cscope和etags数据库。我在树的顶部开始这个脚本。如果这有任何帮助,这些是我的.emacs.el文件中的键绑定。

(defun hide-cscope-buffer ()
  "Turn off the display of cscope buffer"
   (interactive)
   (if (not cscope-display-cscope-buffer)
       (progn
         (set-variable 'cscope-display-cscope-buffer t)
         (message "Turning ON display of cscope results buffer."))
     (set-variable 'cscope-display-cscope-buffer nil)
     (message "Toggling OFF display of cscope results buffer.")))


(global-set-key [f9] 'cscope-find-this-symbol)
(global-set-key [f10] 'cscope-find-global-definition-no-prompting)
(global-set-key [f11] 'cscope-find-functions-calling-this-function)
(global-set-key [f12] 'cscope-find-this-file)
(global-set-key (kbd "C-t") 'cscope-pop-mark)
(global-set-key (kbd "C-n") 'cscope-next-symbol)
(global-set-key (kbd "C-p") 'cscope-prev-symbol)
(global-set-key (kbd "C-b") 'hide-cscope-buffer)
(global-set-key [S-f7] 'cscope-next-file)
(global-set-key [S-f8] 'cscope-prev-file)
(global-set-key [S-f9] 'cscope-find-this-text-string)
(global-set-key [S-f10] 'cscope-find-global-definition)
(global-set-key [S-f11] 'cscope-find-egrep-pattern)                                                                                                                           
(global-set-key [S-f12] 'cscope-find-files-including-file)

我不是常规的emacs用户。当我试图切换到emacs时,我使用了这些, 但后来又回到了vim,在那里我找到了做所有我在emacs中所做的事情的方法。

更新:对于目录层次结构中的多个标记文件,请查看此article多个标记文件部分。

答案 1 :(得分:4)

我写了一些软件包来帮助管理多个标签匹配和许多TAGS文件:

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

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

答案 2 :(得分:2)

您可能也希望查看GNU Global。它支持C和C ++(以及Yacc,Java,PHP4和汇编),所以可能可以很好地为C#工作(但我没有编写任何C#,所以我也可能会说完全无义)。

如果它有效,它应该比常规TAGS文件快得多。

答案 3 :(得分:1)

如上所述,GNU Global非常好。这是一个short introduction,可以在emacs中使用它。

注意,如果你的项目真的是50K文件(和50K locs),那么第一次运行(索引所有这些东西)可能会有点慢。