Vim的自动完成速度非常慢


68

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

有时Vim只是简单地告诉我,这是“扫描中”,这是在说“扫描标签”

我只在Ruby文件中发生这种情况,并且大多数情况下是在文件中有需求时发生的。

我的猜测是,这是一种用于检查相关文件中自动完成选项的功能,但我并不是真的需要它,而是希望使用更快的自动完成功能。


1
您正在使用什么completefunc?
兰迪·莫里斯

1
我有同样的问题,但是在C ++中。您控制住了吗?我试过在有标签文件和无标签文件的情况下进行尝试,但是它会以递归方式扫描当前目录(我将它挂架起来,看它在做什么,并且它在可以找到的所有文件上不断调用stat)。这是一个清晰的环境== slooooow。
falstro 2010年

Answers:


118

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

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

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

这是默认值。我的问题是(实际上是..)“ i”,它扫描所有包含的文件。这有两个问题,第一个,找到所有这些文件可能要花一些时间,尤其是如果您像我一样,

:set path=**

找到第二个问题后,就需要读取它们,如果您使用的是联网文件系统(我使用的是透明文件箱),那么查找和读取所有这些文件都可能会导致高速缓存未命中,从而使其速度非常缓慢。

我现在已经删除了i,因为我有一个标记文件,而且经常(在装载或卸载的情况下)我也有相关文件,这些文件将作为'b'和'u的结果进行搜索'。

采用

set complete-=i

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


非常感谢。这是“ insert.txt”帮助中未提及的与曝光不足相关的配置选项之一
2011年

45

自从7.2升级到Vim 7.3以来,出现了一个非常相似的问题:我使用的是(出色的)ACP插件,并且在更长的源文件(C文件,1700 LOC)中,当我在文件底部附近进行编辑。

使用PerformanceValidator(来自Softwareverify),我发现反复调用了一些折叠方法,这导致了非常高的处理器负载和缓慢的完成。

我的解决方法是将foldmethodfdm)设置为manual。这样就解决了...


1
你太棒了。在我看来,Ruby文件的完成速度实在是太慢了(〜100 LOC)。无法解决。然后我读了这个。我将Ruby缓冲区中的foldmethod更改为“语法”以外的任何内容,并且立即完成操作。现在,为什么在Vim执行自动完成时,为什么折叠方法被称为疯狂?
军团再临》 2012年

1
这也对我有用。再说一遍,“为什么当Vim执行自动完成时,为什么折叠方法被称为疯狂?”!
杰森

2
如果可以的话,我会给+5。大声疾呼此博客,将我指向此处。
开尔文

顺便说一句,这还有助于加快打开大文件的速度。
开尔文2012年

这对我很有帮助。调试这个问题是如此的困难!我正在使用vim事件探查器(!profile start ...),但这并没有打开任何东西。:(非常感谢。
Yogeshwer夏尔马

6

您是否有正在处理的项目的标记文件?如果没有尝试,请生成一个带有旺盛标签的文件,Vim应该使用标签列表插件将其选中。


1
项目根目录中的ctags -R;是命令,如果您使用的是Linux
gustavgans 2010

或更具体地:ctags -R -n --fields = + i + K + S + 1 + m + a --exclude = src / react / conf-srch / node_modules。
Yordan Georgiev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.