【问题标题】:can anyone suggest a better ctags solution for me?谁能为我推荐一个更好的 ctags 解决方案?
【发布时间】:2014-02-09 13:19:46
【问题描述】:

我一直在使用 ctags 和下面的 vim 脚本,并且在我自己的小项目中没有问题。但是当我进入一些大项目时,在用 c++ 编写的游戏中,ctags 和 cscope 的递归命令似乎比我想象的要慢很多。我现在实际上设法在后台运行它,但似乎我的笔记本电脑正忙于进行标记。

我听说有一个解决方案,在每个子目录中,你做一个标签,当你在一个特定的子目录中工作时,你可以在根目录中查阅标签以获得其他子目录标签。这可能吗?如果有人可以用这种方法给我具体的 HOW-TOS,我将不胜感激。

或者如果有更好的解决方案,我很想知道。

这是我的 vim 脚本代码

function! UpdateTags()
    let curdir = getcwd()
    let gitdir = finddir('.git', '.;/')

    if isdirectory(gitdir)
        let l:rootdir = fnamemodify(gitdir, ':h')
        execute 'silent cd ' . l:rootdir
        execute 'silent !ctags -R --c++-kinds=+p --fields=+iaS --extra=+q &'
        if has("cscope")
            execute 'silent !cscope -Rbkq &'
            execute 'silent cs reset'
        endif " has("cscope") 
        execute 'silent cd ' . curdir
    endif
endfunction

【问题讨论】:

  • 一个可能的解决方案:Effortless Ctags with Git
  • 你能告诉我们你的tags选项的价值是什么吗?
  • 你提到的多个标签文件的方法,在ctags主页上有解释:ctags.sourceforge.net/faq.html#15 - 但我不确定你是否会发现根标签文件的更新更快。跨度>
  • @romainl 我使用 set tags=./tags,tags;
  • 好像找不到更好的解决方案....

标签: vim ctags cscope


【解决方案1】:

我发现使用 ctags -R 比使用 ctags 和 ctags -L input 之类的文件要慢,所以我在当前包含大约 3000 个文件的 java 项目中所做的是让 git 给我文件路径,收集将它们放在存档文件中(例如 javafiles.txt),然后在编辑器之外执行 ctags -L javafiles.txt

如果你不想离开 vim,你可以使用 shellscript 来调用带有你想要的参数的 Ctags。 IE。在您的 git 项目的根目录中创建文件 autotags.sh,其中包含以下几行:

#!/bin/bash

set -e
git ls-files | sed "/\.cpp$/!d" >> cscope.files


ctags -L cscope.files

别忘了给它执行权限。一旦你有了 shellscript,你的 vimscript 代码将如下所示:

function! UpdateTags()
    let curdir = getcwd()
    let gitdir = finddir('.git', '.;/')

    if isdirectory(gitdir)
        let l:rootdir = fnamemodify(gitdir, ':h')
        execute 'silent cd ' . l:rootdir
        execute 'silent !./autotags.sh &'
        if has("cscope")
            execute 'silent !cscope -bkq &'
            execute 'silent cs reset'
        endif " has("cscope") 
        execute 'silent cd ' . curdir
    endif
endfunction

文件名是 cscope.files,因为它是 cscope 默认使用的名称。你应该阅读http://cscope.sourceforge.net/large_projects.html

但是,生成文件列表的速度并没有您想要的那么快,并且代码需要在不需要时进行一些调整才能避开该步骤,但通常这比使用带有ctagscscope 的递归扫描要快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多