最后更新于 .

之前的文章已经介绍过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的词典。

Pingbacks

  1. vim使用函数自动补全 « TECH on #

    [...] From:http://www.vimer.cn/2010/01/%E9%80%9A%E8%BF%87vim%E5%AD%97%E5%85%B8%E8%A1%A5%E5%85%A8%EF%BC%8C%E5%AE... [...]

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 明城

    明城 on #

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

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  2. 依云

    依云 on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  3. sirnon

    sirnon on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  4. sirnon

    sirnon on #

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

    Reply

  5. fuadam1982

    fuadam1982 on #

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

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

    Reply

    1. Dante

      Dante on #

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

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

      Reply

  6. fuadam1982

    fuadam1982 on #

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

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

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  7. Vayn

    Vayn on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  8. Jerry

    Jerry on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. ekeyme

        ekeyme on #

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

        Reply

        1. ekeyme

          ekeyme on #

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

          Reply

          1. Dante

            Dante on #

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

            Reply

  9. haha

    haha on #

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

    Reply

  10. 城主

    城主 on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. wych

        wych on #

        文章里那个还是错的

        Reply

  11. Ni许嵩

    Ni许嵩 on #

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

    再次真诚的感谢大师!

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  12. surmise

    surmise on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. Qzi

        Qzi on #

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

        Reply

  13. surmise

    surmise on #

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

    Reply

  14. qloog

    qloog on #

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

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

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

    Reply

  15. Eric

    Eric on #

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

    Reply

    1. Dante

      Dante on #

      是的

      Reply

  16. sumuu

    sumuu on #

    你好啊!请问是不是还要设置什么快捷方式?我按照配置来的怎么就不自动提示呢?
    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

    谢谢了!

    Reply

    1. Dante

      Dante on #

      应该不需要的。

      你看一下vimrc有设置 filetype on 么

      Reply

  17. hwz

    hwz on #

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

    Reply

  18. leirayen

    leirayen on #

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

    Reply

发表评论