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