【问题标题】:Vim's autocomplete is excruciatingly slowVim 的自动完成非常慢
【发布时间】:2011-01-11 07:06:37
【问题描述】:

大多数时候,Vim 中的自动完成功能对我来说效果很好,但有时它似乎是在扫描当前文件引用的文件,然后它变得非常缓慢,有时需要几秒钟才能将焦点释放给我。

有时 Vim 会简单地告诉我它正在“扫描”,有时它是在说“正在扫描标签”

我只在 Ruby 文件中发生过这种情况,而且它主要发生在文件中有需求时。

我的猜测是,这是一种检查相关文件的自动完成选项的功能,但我并不真正需要它,并且更喜欢更快的自动完成。

【问题讨论】:

  • 你用的是什么completefunc?
  • 我有同样的问题,但在 C++ 中。你控制住了吗?我尝试过使用和不使用标签文件,但它会不断递归地扫描当前目录(我跟踪它,看看它在做什么,并且它一直在它可以找到的所有文件上调用 stat )。这是一个清晰的环境 == slooooow。

标签: vim autocomplete code-completion


【解决方案1】:

正如我在评论中提到的,我遇到了同样的问题。这是我发现的;

有一个设置告诉 VIM 在哪里寻找补全,称为complete

:set complete
complete=.,w,b,u,t,i

这是默认值。我的问题是(实际上是..)'i',它扫描所有包含的文件。这里有两个问题,第一个,查找所有这些文件可能需要很长时间,尤其是如果你像我一样有

:set path=**

第二个问题,一旦发现,就需要读取它们,如果您使用的是网络文件系统(我在 clearcase 上),查找和读取所有这些文件都可能会触发缓存未命中,从而导致速度非常缓慢。

我现在已经删除了 i,因为我有一个标签文件,而且我的缓冲区(加载或卸载)中也有相关文件,这些文件将作为 'b' 的结果进行搜索和“你”。

使用

set complete-=i

要从列表中删除 i,请注意这是缓冲区的本地内容。

【讨论】:

  • 非常感谢。这是“insert.txt”帮助中未提及的这些曝光不足的错误相关配置选项之一
【解决方案2】:

自从升级到 Vim 7.3(从 7.2)后遇到了一个非常相似的问题:我使用的是(优秀的)ACP plugin,并且在更长的源文件(C 文件,1700 LOC)中,弹出窗口需要很长时间才能跳过我在文件底部附近编辑时的建议。

使用PerformanceValidator(来自Softwareverify),我发现一些折叠方法被一次又一次地调用,导致处理器负载非常高并且完成速度很慢。

我的解决方法是将foldmethod (fdm) 设置为manual。这解决了它...

【讨论】:

  • 你太棒了。 Ruby 文件的完成对我来说非常慢,在大小相当微不足道的文件中(~100 LOC)。无法解决。然后我读了这个。我将 Ruby 缓冲区中的 foldmethod 更改为“语法”之外的任何内容,并且立即完成。现在,到底为什么当 Vim 进行自动完成时 foldmethod 会被疯狂地调用?
  • 这对我也有用。再一次,“为什么当 Vim 进行自动完成时,foldmethod 会被疯狂地调用?”!!
  • 如果可以的话,我会给 +5。大声喊叫this blog 指向我这里。
  • 顺便说一句,这也有助于加快大文件的打开速度。
  • 这对我很有帮助。调试这个问题太难了!我正在使用 vim profiler (!profile start ...) 但这并没有出现任何问题。 :( 非常感谢。
【解决方案3】:

你有你正在从事的项目的标签文件吗?如果没有尝试使用 exuberant-ctags 生成一个,Vim 应该使用 taglist 插件来获取它。

【讨论】:

  • ctags -R 在你的项目根目录中;如果你在 linux 上是命令
  • 或更具体地说:ctags -R -n --fields=+i+K+S+l+m+a --exclude=src/react/conf-srch/node_modules .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2023-03-30
  • 1970-01-01
  • 2011-07-22
  • 2011-10-22
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多