2010-01-30 97 views
55

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

有时Vim的告诉我简单地认为它是“扫描”其他时候,它说:“扫描标签”

我只有这一点在Ruby文件,并且它发生主要是当有文件中的要求。

我的猜测是,这是某种功能,它会检查相关文件的自动完成选项,但我并不真的需要这种功能,并且希望更快地自动完成。

+1

你使用了什么样的完整功能? –

+1

我有同样的问题,但在C++中。你有没有受到控制?我尝试过使用和不使用标签文件,但是它会以递归方式持续扫描当前目录(我将它放大,看看它在做什么,并且一直在调用它可以找到的所有文件的统计信息)。这是一个清晰的环境== slooooow。 – falstro

回答

98

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

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

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

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

:set path=** 

问题二,一旦发现,他们需要被读取,如果你如果使用网络文件系统(我是清晰的),发现并读取所有这些文件可能会触发缓存未命中,使其变得非常缓慢。

我已经删除了我现在,因为我有一个标签,文件,往往不是,我也有我的缓冲区(加载或卸载)相关的文件将被搜索“B的结果' 和你'。

使用

set complete-=i 

从列表中删除我,注意,这是本地缓存。

+0

非常感谢。这是'insert.txt'帮助中未提及的其中一个曝光不足的相关配置选项 – sehe

4

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

+0

ctags -R 在您的项目根目录中;是你的命令,如果你在linux上 – gustavgans

40

从升级到Vim 7.3(从7.2开始)有一个非常类似的问题:我使用(出色的)ACP plugin,在较长的源文件(C文件,1700 LOC)中,弹出窗口花费时间跳过这些建议当我在文件底部附近进行编辑时。

使用PerformanceValidator(从Softwareverify),我发现了一些折叠方法进行了一次又一次打来电话,导致非常高的处理器负载和缓慢完成。

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

+1

您真是太棒了。对于我来说,在Ruby文件中完成的速度非常慢,文件大小很小(大约100 LOC)。解决不了。然后我读了这个。我将Ruby缓冲区中的foldmethod更改为除“语法”之外的任何内容,并立即完成完成。 现在,为什么在Vim执行自动完成时,foldmethod被称为疯狂? – Legion

+1

这也适用于我。再说一遍,“为什么在Vim做自动完成时,foldmethod被称为疯狂?”! – Jason

+1

如果可以的话,我会给+5。大声呼吁[这个博客](http://economyofeffort.com/2012/03/01/fixing-slow-vim-auto-completion-with-ruby-files/)指向我在这里。 – Kelvin