最后更新于 .

最近需要写一些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,结果如下:

phpcheck1

修改为

<?php phpinfo()?>

并保存后,按下F6,结果如下:

phpcheck2

好啦,那么在vim中进行php语法检查的功能就到这里啦,希望对大家有所帮助~~

Pingbacks

  1. vim(gvim)配合ZendCodeAnalyzer检查php语法 | Vim中文网 on #

    [...] 本博之前有写过一篇vim+php.exe检查php语法的文章-在vim中检查php语法格式,这种方式的优点是只依赖php环境本身,但缺点也很明显:检查并不严格,很多错误检查不出来。 [...]

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. nickyan

    nickyan on #

    用zendcodeanlyzer会强一些,除了检查语法错误外,还可以检查语法缺陷,相当于编译器的警告

    Reply

    1. Dante

      Dante on #

      呃,我对php还不是很熟……以后还要您多多指教呢~~哈哈

      Reply

  2. 梧桐

    梧桐 on #

    请教博主,为什么我才用这个办法quickfix窗口没有任何提示?我用了网上的几个版本都不可以..我在命令提示符下可以成功,如下
    C:\&gt;"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

    1. Dante

      Dante on #

      呃,强制指定一下php的路径试一下?

      Reply

      1. 梧桐

        梧桐 on #

        果然是。。博主神人。。虽然不清楚原理。。。我来试试把zendcodeanlyzer折腾进quickfix

        Reply

  3. 梧桐

    梧桐 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

    1. Dante

      Dante on #

      呃。。。这个写的不对的。。我这几天就会写篇文章来介绍Zend Code Analyzer与vim的搭配,到时候详细说一下。

      Reply

  4. 静水之人

    静水之人 on #

    学习了,求发一个linux下的。

    Reply

    1. Dante

      Dante on #

      已经发送,请查收。

      Reply

  5. 伴随着你

    伴随着你 on #

    这个对标点符号没有错误提示。
    这里真不错哈,学会用几个插件了~

    Reply

  6. 荒野无灯

    荒野无灯 on #

    这个好啊,收下了~~

    Reply

  7. fredyj

    fredyj on #

    学习中,求发一个win 和 linux 下面的版本

    Reply

  8. 大舒

    大舒 on #

    有个问题。。既然博主都能写vim脚本了,为什么不直接把vim的快捷键设置成遇到PHP才起作用。。 然后我们按下F6就可以执行啦~~ 注意if &amp;filetype=“php”map :call CheckSyntax()endif

    Reply

    1. 大舒

      大舒 on #

      F6和尖括号被过滤掉了

      Reply

发表评论