Vim 为什么我的ctag功能跳得非常慢? 2014年7月22日重要更新

Vim 为什么我的ctag功能跳得非常慢? 2014年7月22日重要更新,vim,tags,ctags,Vim,Tags,Ctags,我发现长时间的跳转只有在跳转到其他目录中的模块和类时才会发生。跳转到其他目录中其他模块中的函数或方法速度很快(花费1或2秒) 我是ctags新手,所以我试着在网上找到一些教程 我读了其中大部分,发现这一条听起来更正式: 但是我发现在本教程中遵循方法3:在每个叶节点目录中构建标记文件,在主目录中构建非静态标记文件。但是我不能在不同的模块之间跳入叶节点。我只能从主目录跳转到叶节点模块函数 无论如何,我找到了另一个教程: . 我在主目录中构建了一个巨大的标记,包括4700多个标记行。利用 ctags

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


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

我读了其中大部分,发现这一条听起来更正式:

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

无论如何,我找到了另一个教程: . 我在主目录中构建了一个巨大的标记,包括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秒
  • 我在wmii中使用了丰富的Ctags 5.9、Vim 7.4和Ubuntu 14.04
  • 我标记搜索的my_项目目录是Windows7主操作系统和VirtualBox Ubuntu 14.04操作系统之间的共享目录
  • 我也在使用标记列表,但是当我在包含标记文件的主目录中编辑一个文件时,我没有看到子目录中的函数,例如逻辑出现在标记列表(:TlistToogle)中
  • 当函数跳跃处于死锁搜索状态时,即使vim/path/to/my/file也会非常慢

    • 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
      • $dir
      因为这两个都涉及文件系统访问


      检查
      &tags
      &path
      选项的内容(使用
      :set tags
      :set path
      )并确保位于网络驱动器或慢速驱动器上的任何一个选项都没有任何内容。

      我只想在这里添加此选项作为答案,因为它隐藏在@sylvain:

      set tags=tags
      set path=.
      

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

      我有大约7000个,没有减速。您是否已清理所有生成的旧标记文件?是否有问题?它位于git目录中。我觉得它太野了。我使用ctrl+]来jump@FDinoff,我清理了所有这些标签,只留下了主要的大标签,问题仍然存在,它是如此有线,关键是它可以成功地做到这一点,但有30秒的延迟!!!将代码库复制到本地机器上,您肯定会看到一个巨大的速度提升。再次,请查看将项目移动到虚拟机(而不是共享目录)是否会改变任何内容。另外,正确的命令是
      $ctags-R.
      。没有尝试过,但不想浪费对系统的赏金。我猜你在这个问题上花费了很多精力,所以你应该得到这个。现在方法跳转不是问题,只有模块跳转和很少的方法跳转仍然非常慢。我添加了
      set tags=tags
      set path=。
      ,它为我解决了这个问题。使用ctrlptjump也帮助我更快地跳转到标签。