Vim 的自动完成非常慢
Posted
技术标签:
【中文标题】Vim 的自动完成非常慢【英文标题】:Vim's autocomplete is excruciatingly slow 【发布时间】:2011-01-11 07:06:37 【问题描述】:大多数时候,Vim 中的自动完成功能对我来说效果很好,但有时它似乎是在扫描当前文件引用的文件,然后它变得非常缓慢,有时需要几秒钟才能将焦点释放给我。
有时 Vim 会简单地告诉我它正在“扫描”,有时它是在说“正在扫描标签”
我只在 Ruby 文件中发生过这种情况,而且它主要发生在文件中有需求时。
我的猜测是,这是一种检查相关文件的自动完成选项的功能,但我并不真正需要它,并且更喜欢更快的自动完成。
【问题讨论】:
你用的是什么completefunc? 我有同样的问题,但在 C++ 中。你控制住了吗?我尝试过使用和不使用标签文件,但它会不断递归地扫描当前目录(我跟踪它,看看它在做什么,并且它一直在它可以找到的所有文件上调用 stat )。这是一个清晰的环境 == slooooow。 【参考方案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 .以上是关于Vim 的自动完成非常慢的主要内容,如果未能解决你的问题,请参考以下文章