69

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

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

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

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

4

3 回答 3

119

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

有一个设置告诉 VIM 在哪里寻找完成,称为complete.

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

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

:set path=**

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

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

采用

set complete-=i

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

于 2010-03-17T07:53:08.883 回答
46

自从升级到 Vim 7.3(从 7.2)后有一个非常相似的问题:我使用的是(优秀的)ACP 插件和更长的源文件(C 文件,1700 LOC),当我在在文件底部附近进行编辑。

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

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

于 2010-11-25T13:11:03.020 回答
6

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

于 2010-01-30T22:24:02.257 回答