之前的文章已经介绍过vim中实现各种补全,这篇文章我们主要以php为例,实现通过字典补全,来自动补全php函数。
首先,我们从下面的url下载一个php的函数字典文件
http://cvs.php.net/viewvc.cgi/phpdoc/funclist.txt
然后改名字为 php_funclist.txt,并放在vim的安装目录的ExtraVim下(笔者的是C:/vim/ExtraVim)

然后,我们就可以通过如下两行代码来实现将php_funclist.txt字典文件载入到vim中啦~

set dictionary-=$VIM/ExtraVim/php_funclist.txt dictionary+=$VIM/ExtraVim/php_funclist.txt
set complete-=k complete+=k

注意上面的代码中,我的php_funclist.txt的路径是$VIM/ExtraVim/php_funclist.txt,$VIM的意思是vim的安装目录,比如我安装在C:/vim/下面,那么$VIM 就是 C:/vim。

呵呵,看起来好像结束了,但是别忙,有一个很重要的问题就是,如果只是这样设置的话,那么当我在编辑cpp文件时,也会自动调用php的函数补全,这可不是我想看到的。
解决方法如下:

au FileType php call AddPHPFuncList()
function AddPHPFuncList()
    
set dictionary-=$VIM/ExtraVim/php_funclist.txt dictionary+=$VIM/ExtraVim/php_funclist.txt
    set complete-=k complete+=k
endfunction

简单解释一下,即只有当文件类型是php的时候(无论你是打开一个.php文件,或者new xx.php,或者setf php),我才会加载php_funclist.txt的词典。

版权所有,转载注明出处.http://www.vimer.cn

暂无相关产品

36则回应给“通过vim字典补全,实现php函数名自动补全”

  1. 明城说道:

    其实一句话就可以了,比如我的:

    au FileType php setlocal dict+=~/.vim/dict/php_funclist.txt

    [回复]

    Dante 回复:

    呵呵,实现是一样的嘛~~不过这样写确实省不少笔墨~~

    [回复]

  2. 依云说道:

    最好写到 ftplugin 下对应的文件里去,不仅不用 au,而且方便管理。不然等你的 .vimrc 长达几千行时你就后悔莫及了。(我的 .vimrc 和自己写的 ftplugin 加起来已经一千多行了,这还没算 plugin 和 syntax, after 等里面的文件)

    [回复]

    Dante 回复:

    哇,我还以为我的vimrc 600行已经很多了,现在比起来简直小巫见大巫……额,其实我之前也有把各个功能模块拆分到ftplugin,plugin等目录里面去,后来发现太分散了,并不如一个vimrc里面来的直接,不如直接用outline来管理更方便写,呵呵,当然见仁见智啦~~

    [回复]

  3. sirnon说道:

    看各位大虾的评论,真是望尘莫及,望好心的大虾可以把你们的_vimrc文件能传份给我。新手,谢谢了,最好是带方法的!!

    [回复]

    Dante 回复:

    呃,这个,实在是没有办法做到呀,不是给你vimrc然后简单写使用方法就能用的……建议你还是先多学学基本知识,然后自己尝试写vimrc吧

    [回复]

  4. sirnon说道:

    对了,请传至我的邮箱sinron.qu@hotmail.com。谢谢了!!!

    [回复]

  5. fuadam1982说道:

    博主再用字典补全的时候有没有遇到一个问题就是在(后面就失灵了,比如我有个python的字典是:
    socket.AF_INET

    如果是 tmp =socket.AF_INET是可以的,如果换成
    s = socket.socket(socket.AF_INET这时候就没有自动补全了,而且会报错“Unknown function: GetSnipsInCurrentScope”
    如果我在(之后加一个空格就能正常时候了。这个问题让我很上火

    [回复]

    Dante 回复:

    呃,应该不会吧,我用的时候,(后面就会算新词的开始,不会报这个错误哦。

    是不是vim的版本有问题呢?是最新的7.2版吗?

    [回复]

  6. fuadam1982说道:

    是我的autocomplpop和snipmate插件之间的问题。

    我现在主要是对iskeyword这个东西有点搞不清楚,是不是说这里面定义的是补全时涉及到的关键字?

    比如有个词典是 :module:
    我C-x C-k以后只能补全 :module 最后一个‘:’没有了。我要是设置了iskeyword=:
    补全的时候就直接 :m:了,好奇怪啊

    [回复]

    Dante 回复:

    呃,没看懂……我对字典补全用得并不多,主要是觉得太依赖于补全,会降低大脑的记忆力……

    [回复]

  7. Vayn说道:

    要是把.vimrc改成.gvimrc,snipmate就不工作了,郁闷啊。本想把vim的设置和gvim的设置分开的。

    [回复]

    Dante 回复:

    呃,貌似我在vimrc中对snipmate啥配置都没有……

    [回复]

  8. Jerry说道:

    php的函数字典文件 从哪里可以下载?博主给定有误。请指教,谢谢!

    [回复]

    Dante 回复:

    汗啊,那个链接还真失效了。。。我上传到博客里吧
    http://www.vimer.cn/wp-content/uploads/2010/08/php_funclist.txt

    [回复]

    ekeyme 回复:

    恩,万分感谢。 链接失效害我找了几天的字典

    [回复]

    ekeyme 回复:

    不知道一般下载字典要到哪里下

    [回复]

    Dante 回复:

    呃,这个我也不太清楚,只要找到每种语言的函数库,其实自己做一个也很简单。

    [回复]

  9. haha说道:

    嘿嘿不错,我用那个超级tab补全,但是好慢。现在改用这个了,速度快多了。very good

    [回复]

  10. 城主说道:

    新官方链接:http://svn.php.net/repository/phpdoc/doc-base/trunk/funclist.txt

    [回复]

    Dante 回复:

    非常感谢!文章已经更新~

    [回复]

    wych 回复:

    文章里那个还是错的

    [回复]

  11. Ni许嵩说道:

    太棒了!VIM真的太好用了!大师,有没有便携版的?就是可以装到U盘里,无论走到哪儿,把U盘一插,双击VIM就可以用的版本?如果有的话,也麻烦大师发一份给我!

    再次真诚的感谢大师!

    祝大师工作顺利,万事如意,财源滚滚!

    [回复]

    Dante 回复:

    哈哈,这个我还真没试过,不过好像把gvim.exe直接拿出来就可以用~

    [回复]

  12. surmise说道:

    但是没有函数参数提示哇?!

    [回复]

    Dante 回复:

    嗯,这个确实没有参数提示。。。

    [回复]

    Qzi 回复:

    现在有参数的解决方法了吗?

    [回复]

  13. surmise说道:

    phpcomplete.vim
    啊,7.0+的vim早有这个了.
    使用omin方式就可以了.

    [回复]

  14. qloog说道:

    我的怎么还是实现不了呢?

    ” php函数自动补全
    autocmd FileType php set dictionary-=$VIM/vimfiles/plugin/funclist.txt dictionary+=$VIM/vimfiles/plugin/funclist.txt
    set complete-=k complete +=k

    windows环境下,看看是否正确。谢谢!

    [回复]

  15. Eric说道:

    是不是只要设一次complete +=k就够了?

    [回复]

    Dante 回复:

    是的

    [回复]

  16. sumuu说道:

    你好啊!请问是不是还要设置什么快捷方式?我按照配置来的怎么就不自动提示呢?
    au FileType php call AddPHPFuncList()
    function AddPHPFuncList()
    set dictionary-=$VIM/Extenstion/php_funclist.txt dictionary+=$VIM/Extenstion/php_funclist.txt
    set complete-=k complete+=k
    endfunction

    谢谢了!

    [回复]

    Dante 回复:

    应该不需要的。

    你看一下vimrc有设置 filetype on 么

    [回复]

  17. hwz说道:

    前段时候用这个的时候还不会慢,现在开一卡一慢了,会显示“正在扫描xxx/xxx/xxx/php.dict,博主有招支吗?

    [回复]

  18. leirayen说道:

    话说我的php补全老弄不好,你说的那个$VIM/。。。中的$VIM可以直接$VIM还是C:/Vim/… ?
    发现php补全不是很好用,打了三个字母后出现就只出现一个方法,不打任何东西按tab可以列出全部的方法

    [回复]

发表评论