大多数时候,Vim中的自动完成功能对我来说很好用,但有时它似乎会扫描当前文件引用的其他文件,然后变得非常缓慢,有时需要几秒钟才能将焦点释放回给我。
有时Vim只告诉我它正在“扫描”,有时它在说“扫描标签”
我只在Ruby文件中遇到过这种情况,并且它通常发生在文件中有一个require语句的时候。
我猜这是一种检查自动完成选项相关文件的功能,但我并不真正需要它,并且更希望更快速的自动完成。
大多数时候,Vim中的自动完成功能对我来说很好用,但有时它似乎会扫描当前文件引用的其他文件,然后变得非常缓慢,有时需要几秒钟才能将焦点释放回给我。
有时Vim只告诉我它正在“扫描”,有时它在说“扫描标签”
我只在Ruby文件中遇到过这种情况,并且它通常发生在文件中有一个require语句的时候。
我猜这是一种检查自动完成选项相关文件的功能,但我并不真正需要它,并且更希望更快速的自动完成。
正如我在评论中提到的,我也遇到了同样的问题。这是我发现的解决方法;
VIM有一个设置选项告诉它在哪里寻找自动补全,称为complete
。
:set complete
complete=.,w,b,u,t,i
这是默认值。我的问题是(实际上是曾经的问题),'i'扫描所有包含的文件。这里有两个问题,第一个问题是找到所有这些文件可能需要相当长的时间,特别是如果你像我一样拥有很多文件。
:set path=**
第二个问题是,一旦找到这些文件,就需要阅读它们。如果你使用网络文件系统(我使用的是clearcase),那么查找和阅读所有这些文件可能会触发缓存未命中,导致速度非常慢。
我现在已经删除了“i”,因为我有一个tags文件,而且往往也有相关的文件在我的缓冲区中(已加载或未加载),这些文件将作为“b”和“u”的结果进行搜索。
使用:
set complete-=i
要从列表中删除 i,请注意这仅在该缓冲区内有效。
自从升级到Vim 7.3(从7.2)后,我遇到了一个非常类似的问题:我正在使用(优秀的)ACP插件在较长的源文件(C文件,1700行代码)中,在我编辑文件底部附近时,弹出窗口需要很长时间才能跳转到建议列表上。
使用PerformanceValidator(来自Softwareverify),我发现有些折叠方法一遍又一遍地被调用,导致处理器负载非常高,进而导致自动完成缓慢。
我的解决方法是将foldmethod
(fdm
)设置为manual
。这解决了问题...
您正在进行的项目是否有一个标签文件?如果没有,请尝试使用exuberant-ctags生成一个文件,Vim应该可以通过taglist插件检索到它。