之前的文章已经介绍过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的词典。
明城 on #
其实一句话就可以了,比如我的:
au FileType php setlocal dict+=~/.vim/dict/php_funclist.txt
Reply
Dante on #
呵呵,实现是一样的嘛~~不过这样写确实省不少笔墨~~
Reply
依云 on #
最好写到 ftplugin 下对应的文件里去,不仅不用 au,而且方便管理。不然等你的 .vimrc 长达几千行时你就后悔莫及了。(我的 .vimrc 和自己写的 ftplugin 加起来已经一千多行了,这还没算 plugin 和 syntax, after 等里面的文件)
Reply
Dante on #
哇,我还以为我的vimrc 600行已经很多了,现在比起来简直小巫见大巫……额,其实我之前也有把各个功能模块拆分到ftplugin,plugin等目录里面去,后来发现太分散了,并不如一个vimrc里面来的直接,不如直接用outline来管理更方便写,呵呵,当然见仁见智啦~~
Reply
sirnon on #
看各位大虾的评论,真是望尘莫及,望好心的大虾可以把你们的_vimrc文件能传份给我。新手,谢谢了,最好是带方法的!!
Reply
Dante on #
呃,这个,实在是没有办法做到呀,不是给你vimrc然后简单写使用方法就能用的……建议你还是先多学学基本知识,然后自己尝试写vimrc吧
Reply
sirnon on #
对了,请传至我的邮箱sinron.qu@hotmail.com。谢谢了!!!
Reply
fuadam1982 on #
博主再用字典补全的时候有没有遇到一个问题就是在(后面就失灵了,比如我有个python的字典是:
socket.AF_INET
如果是 tmp =socket.AF_INET是可以的,如果换成
s = socket.socket(socket.AF_INET这时候就没有自动补全了,而且会报错“Unknown function: GetSnipsInCurrentScope”
如果我在(之后加一个空格就能正常时候了。这个问题让我很上火
Reply
Dante on #
呃,应该不会吧,我用的时候,(后面就会算新词的开始,不会报这个错误哦。
是不是vim的版本有问题呢?是最新的7.2版吗?
Reply
fuadam1982 on #
是我的autocomplpop和snipmate插件之间的问题。
我现在主要是对iskeyword这个东西有点搞不清楚,是不是说这里面定义的是补全时涉及到的关键字?
比如有个词典是 :module:
我C-x C-k以后只能补全 :module 最后一个‘:'没有了。我要是设置了iskeyword=:
补全的时候就直接 :m:了,好奇怪啊
Reply
Dante on #
呃,没看懂……我对字典补全用得并不多,主要是觉得太依赖于补全,会降低大脑的记忆力……
Reply
Vayn on #
要是把.vimrc改成.gvimrc,snipmate就不工作了,郁闷啊。本想把vim的设置和gvim的设置分开的。
Reply
Dante on #
呃,貌似我在vimrc中对snipmate啥配置都没有……
Reply
Jerry on #
php的函数字典文件 从哪里可以下载?博主给定有误。请指教,谢谢!
Reply
Dante on #
汗啊,那个链接还真失效了。。。我上传到博客里吧
http://www.vimer.cn/wp-content/uploads/2010/08/php_funclist.txt
Reply
ekeyme on #
恩,万分感谢。 链接失效害我找了几天的字典
Reply
ekeyme on #
不知道一般下载字典要到哪里下
Reply
Dante on #
呃,这个我也不太清楚,只要找到每种语言的函数库,其实自己做一个也很简单。
Reply
haha on #
嘿嘿不错,我用那个超级tab补全,但是好慢。现在改用这个了,速度快多了。very good
Reply
城主 on #
新官方链接:http://svn.php.net/repository/phpdoc/doc-base/trunk/funclist.txt
Reply
Dante on #
非常感谢!文章已经更新~
Reply
wych on #
文章里那个还是错的
Reply
Ni许嵩 on #
太棒了!VIM真的太好用了!大师,有没有便携版的?就是可以装到U盘里,无论走到哪儿,把U盘一插,双击VIM就可以用的版本?如果有的话,也麻烦大师发一份给我!
再次真诚的感谢大师!
祝大师工作顺利,万事如意,财源滚滚!
Reply
Dante on #
哈哈,这个我还真没试过,不过好像把gvim.exe直接拿出来就可以用~
Reply
surmise on #
但是没有函数参数提示哇?!
Reply
Dante on #
嗯,这个确实没有参数提示。。。
Reply
Qzi on #
现在有参数的解决方法了吗?
Reply
surmise on #
phpcomplete.vim
啊,7.0+的vim早有这个了.
使用omin方式就可以了.
Reply
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
Eric on #
是不是只要设一次complete +=k就够了?
Reply
Dante on #
是的
Reply
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
Dante on #
应该不需要的。
你看一下vimrc有设置 filetype on 么
Reply
hwz on #
前段时候用这个的时候还不会慢,现在开一卡一慢了,会显示“正在扫描xxx/xxx/xxx/php.dict,博主有招支吗?
Reply
leirayen on #
话说我的php补全老弄不好,你说的那个$VIM/。。。中的$VIM可以直接$VIM还是C:/Vim/... ?
发现php补全不是很好用,打了三个字母后出现就只出现一个方法,不打任何东西按tab可以列出全部的方法
Reply