为什么我的ctag功能跳得非常慢?

时间:2014-07-16 14:31:28

标签: vim tags ctags


重要更新22,2014年7月

我发现只有跳转到其他目录中的模块和类时才会发生长时间的跳转。跳转到其他目录中其他模块的功能或方法很快(花费1或2秒)


我是ctags的新手,所以我尝试在网上找到一些教程。

我读了大部分内容,发现这个听起来更正式:source_forge ctag faq

但我发现遵循本教程中的方法3:在每个叶节点目录中构建标记文件,在主目录中构建非静态标记文件。但我无法在自己不同的模块之间跳转叶节点。我只能从主目录跳转到叶节点模块函数。

无论如何,我找到了另一个教程:benoithamelin's personal tutorial 。我在主目录中构建了一个巨大的标签,包括4700+标签行。使用

ctags -R *
嘿,朋友们。我发现我现在可以跳了。除了一些跳跃,我需要等待大约30秒。这是令人难以忍受的,对于其他视图标签,我可以在1或2秒内快速切换到它们。这里有什么问题?我该如何解决?

下面是我的目录结构的树形图:

my_project
├── tags  # my tag is here
├── lib
│   ├── dir1
│   │   └── sub_dir1
│   ├── dir2
│   ├── dir3
│   └── dir4
├── logics
│   ├── dir1
│   ├── dir2
│   │   └──sub_dir1
│   ├── dir3
│   └── dir4
├── models
└── views
  • 症状是你在vim编辑界面死锁,无法输入任何命令,直到功能跳转完成,耗时近30秒。
  • 我使用Exuberant Ctags 5.9,Vim 7.4和Ubuntu 14.04 with wmii
  • 我标记搜索的my_project目录是Windows7主操作系统和VirtualBox Ubuntu 14.04操作系统之间的共享目录
  • 我也使用taglist,但是当我在主目录中编辑包含标记文件的文件时,我没有看到子目录中的函数,例如loglist中出现的函数(:TlistToogle)
  • 当函数跳转处于死锁搜索状态时,即使vim / path / to / my / file也会很慢

2 个答案:

答案 0 :(得分:2)

我只想在此处添加此内容作为答案,因为它隐藏在@sylvain的评论中:

set tags=tags
set path=.

添加到我的vimrc为我解决了这个问题,运行Neovim 0.2。如果将来有人需要这个。

答案 1 :(得分:0)

vim找到标签并跳转到它的机制大致是:

foreach tagfile in &tags
    search for $tag in $tagfile
    if found:
        get filename from $tagfile
        foreach dir in &path:
             if $filename in $dir:
                 open $filename to $tag

考虑到这一点,有两点我认为你可能会遇到延迟:

  • 打开$tagname
  • $filename
  • 中检查$dir

因为这两者都涉及文件系统访问。

检查&tags&path选项(包含:set tags:set path)的内容,并确保网络中的任何一个都没有任何内容或慢行。