2010-02-04 59 views
3

我在一个大型项目中使用vim与php omnicompletion。我有一个ctags的文件,并使用:在vim中调试缓慢的php omnicomplete

au FileType python set omnifunc=pythoncomplete#Complete 
au FileType php set omnifunc=phpcomplete#CompletePHP 
au FileType javascript set omnifunc=javascriptcomplete#CompleteJS 
au FileType html set omnifunc=htmlcomplete#CompleteTags 
au FileType css set omnifunc=csscomplete#CompleteCSS 
au FileType xml set omnifunc=xmlcomplete#CompleteTags 

set complete="" 
set complete+=. 
set complete+=k 
set complete+=b 
set complete+=t 

在我的配置

目前全完整至少5秒钟后,将完整的PHP内置插件。它不会完成我的标签列表中的任何内容,但<C-p>将完成标签列表中的项目。我曾认为完整= t会检查标签文件。

标签通过<C-p>完成的速度非常快,所以不知道是什么让我的全方位完成变得如此惊人地慢。

如果我在我的家目录中编辑一个新鲜的.php文件vs这个项目目录,那么建立在omni complete中的php很快。

感谢您的任何提示/帮助正在调试此。理想情况下,我希望有omni同时完成内置和ctags完成,这似乎是完整的= t文档建议的。

+0

所有这些'FileType' autocmds都是不必要的,如果实际函数名称发生变化,将导致问题。这些都将由相关的'ftplugin'脚本正确设置。另外,你的第一个'set complete'行中的引号什么也不做。 'set complete ='等效于那行,因为'''是Vim的注释字符 – jamessan 2010-02-04 15:58:10

回答

2

Omnicompletion和<C-p>完成是完全独立的。 complete选项仅影响通过<C-p>/<C-n><C-x><C-l>完成。如果你想omnicompletion也试图使用标签,那么你需要修改完成功能来做到这一点。

在PHP的情况下,它确实考虑标签,但这只是它所做的一部分。 omn​​icompletion比完成标签要慢的原因是它比较复杂。在标签文件中搜索与光标之前的内容匹配的单词与分析当前缓冲区的上下文非常不同,查找可以在其中完成的所有有效类型的信息,将其限制为与光标之前的文本相匹配的内容,那。

+0

不知怎的,我的标签文件大于500M,Cp和omni的打印方式不同,我将标签文件下载到1.5M,似乎现在工作得好多了,我还得多玩一些,并阅读一些不同之处 谢谢 – Rick 2010-02-04 16:45:32