最近需要写一些php的程序,于是研究了一下如何在vim中对php进行语法检查。 其实原理也是和在vim中调用g++/gcc对源文件进行编译是一样的(详见VIM-一键编译单个源文件),也是调用外部程序,然后将错误输出到vim的quickfix中去,为什么要输出到quickfix中?……如果这个都不知道,恐怕也不是在用vim吧……,呵呵,OK,我们进入正题。
先来做准备工作,由于大部分读者应该实在windows下开发,所以我们主要讲解windows下的部署(但是vim的配置代码在linux下一样可以完美执行)。
首先,你需要去下载一个php在windows下的压缩包,然后解压到任何一个地方,进入目录,你会发现一个php.exe。
OK,把这个目录放到环境标量里去。
第二步,打开你的_vimrc,将如下配置写入并保存。
"检查当前文件代码语法(php){{{
function! CheckSyntax()
if &filetype!="php"
echohl WarningMsg | echo "Fail to check syntax! Please select the right file!" | echohl None
return
endif
if &filetype=="php"
" Check php syntax
setlocal makeprg=\"php\"\ -l\ -n\ -d\ html_errors=off
" Set shellpipe
setlocal shellpipe=>
" Use error format for parsing PHP error output
setlocal errorformat=%m\ in\ %f\ on\ line\ %l
endif
execute "silent make %"
set makeprg=make
execute "normal :"
execute "copen"
endfunction
map <F6> :call CheckSyntax()<CR>
"}}}
然后我们按下F6就可以执行啦~~
注意
if &filetype!="php" echohl WarningMsg | echo "Fail to check syntax! Please select the right file!" | echohl None return endif
这一段,是规定了必须是.php格式的文件,所以不要拿成错文件来试哦
OK,我们来测试一下,新建一个php文件phpinfo.php,写入如下代码
<?php phpinfo()>>?>
当然,很明显语法是错误的,按下F6,结果如下:
修改为
<?php phpinfo()?>
并保存后,按下F6,结果如下:
好啦,那么在vim中进行php语法检查的功能就到这里啦,希望对大家有所帮助~~
nickyan on #
用zendcodeanlyzer会强一些,除了检查语法错误外,还可以检查语法缺陷,相当于编译器的警告
Reply
Dante on #
呃,我对php还不是很熟……以后还要您多多指教呢~~哈哈
Reply
梧桐 on #
请教博主,为什么我才用这个办法quickfix窗口没有任何提示?我用了网上的几个版本都不可以..我在命令提示符下可以成功,如下
C:\>"php" -l -n -d html_errors=off a.php
Parse error: syntax error, unexpected ';' in a.php on line 1
Errors parsing a.php
Reply
Dante on #
呃,强制指定一下php的路径试一下?
Reply
梧桐 on #
果然是。。博主神人。。虽然不清楚原理。。。我来试试把zendcodeanlyzer折腾进quickfix
Reply
梧桐 on #
博主。。又来厚颜求救了,ZendCodeAnalyzer的错误提示如下C:\ZendCodeAnalyzer a.php
Zend Code Analyzer 1.2.3
Analyzing C:\Users\WuTongFei\Desktop\a.php...
C:\Users\WuTongFei\Desktop\a.php(line 1): Zend Engine message: syntax e
rror, unexpected ';'
[Zend Code Analyzer] Aborted.
shell returned 3
Hit any key to close this window...
求一个匹配的规则。。我写的
(line\ %l):\ Zend\ Engine\ message:\ syntax\ error,\ %m
这个不行。。
Reply
Dante on #
呃。。。这个写的不对的。。我这几天就会写篇文章来介绍Zend Code Analyzer与vim的搭配,到时候详细说一下。
Reply
静水之人 on #
学习了,求发一个linux下的。
Reply
Dante on #
已经发送,请查收。
Reply
伴随着你 on #
这个对标点符号没有错误提示。
这里真不错哈,学会用几个插件了~
Reply
荒野无灯 on #
这个好啊,收下了~~
Reply
fredyj on #
学习中,求发一个win 和 linux 下面的版本
Reply
大舒 on #
有个问题。。既然博主都能写vim脚本了,为什么不直接把vim的快捷键设置成遇到PHP才起作用。。 然后我们按下F6就可以执行啦~~ 注意if &filetype=“php”map :call CheckSyntax()endif
Reply
大舒 on #
F6和尖括号被过滤掉了
Reply