Check Syntax or Execute PHP file in Vim

Jun 25th, 2007 | Filed under Vim

以前,我介绍过了如何在 VIM 中检查 PHP 的语法错误。这方面的知识,在网上也有很多人介绍。平时我们在编写 PHP 程序的时候,检查语法错误非常的方便,这样我们在浏览器中查看 PHP 程序运行效果时,就不会看到令人恼火的 PHP 语法错误了。

但有些时候,我们如果是想运行一小段简单的 PHP 代码时,该怎么办呢?以前我是通过 EditPlus 的 User Tools 来实现的,EP 的 User Tools 可以设定一个外部程序(比如 PHP 解析器),来运行 PHP 文件,然后在 Output Window 中显示运行的结果,非常方便。这次呢,我会介绍一下如何在 Vim 中实现相同的功能。

首先看一下下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Parse and execute current php file
"""""""""""""""""""""""""""""""""""""""""""""""""""""
 
function! PhpParseExecute()
    " Parse and execute current php file
    setlocal makeprg=C:\PHP5\php.exe\ -f
 
    " Set shellpipe
    setlocal shellpipe=>
 
    " Use error format for parsing PHP error output
    setlocal errorformat=%m\ in\ %f\ on\ line\ %l
    make %
    clist
endfunction
 
map <F6> :call PhpParseExecute()<CR>
imap <F6> <ESC>:call PhpParseExecute()<CR>

如果你能看的懂 Vim Script,上面的代码一定会让你豁然开朗,其实这也是 Vim 官方网站的中的一个 Script,并不是我的发现。在很早之前我就在不断的思考,如何在 Vim 中执行 PHP 文件。我当初的做法是使用 “!” 调用 php.exe 来运行 PHP 文件,这个方法的确可行,但糟糕的是,Vim 在 Windows 平台上调用外部程序会弹出一个 DOS 窗口,非常的 Ugly!于是我只好放弃了这种非常之不优雅的做法,呵呵!直到我前段时间看到这个 Script,于是一切问题迎刃而解:P。

上面的 Script 思路很清晰,首先设置 makeprg 指定 PHP 解析器的位置,并使用 :make 命令来运行 PHP 脚本,然后设定 shellpipe 将运行结果发送到 VIM 的 “error file”,这里的 “>” 是 DOS 系统上面的默认值。最后执行 clist,打开 QuickFix 窗口,显示运行结果,如果有错误则直接显示 PHP 错误信息,而配置的 errorformat 正则表达式,在返回 PHP 错误时,按下回车键后,直接关闭 QuickFix,并把光标定位到出错的一行。

同样,我们也可以根据上面的脚本模板来改造一下,PHP 语法检查的功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Check PHP Syntax using makeprg
"""""""""""""""""""""""""""""""""""""""""""""""""""""
 
function! PhpCheckSyntax()
    " Check php syntax
    setlocal makeprg=\"C:\php5\php.exe\"\ -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
    make %
endfunction
 
" Perform :PhpCheckSyntax()
map <F5> :call PhpCheckSyntax()<CR>
imap <F5> <ESC>:call PhpCheckSyntax()<CR>

为什么要改造这个语法检查的功能呢?因为按照以前做法,两者会冲突的,呵呵 :)

Tags: , ,
  1. wen
    May 29th, 2008 at 15:54
    Reply | Quote | #2

    你好请教你php语法检查问题
    我按照你上面代码写在.vimr中了
    每次检查都会出现这个提示:
    :!make >c\docume~1\wen\locals~1\temp\vie60.tmp 2>&1
    shell 返回1
    (1/2):’make’ 不是内部或外部命令,也不是可以运行程序。
    请按 enter 或其他命令继续
    请问如何解决?谢谢!
    我用DOS可以输出但是用QUICKFIX就出现这个问题

Comments are closed.