【问题标题】:Validate PHP syntax in VIM在 VIM 中验证 PHP 语法
【发布时间】:2011-09-01 14:49:46
【问题描述】:

我想知道如何在不每次都关闭 VIM 的情况下验证 PHP 文件在 VIM 中是否有效?

谢谢

【问题讨论】:

标签: php vim syntax


【解决方案1】:

你可以在 vim 中执行 shell 命令。这与从 shell 调用 php -l filename.php 相同:

:!php -l %

我已将此映射到我的 ~/.vim/after/ftplugin/php.vim 文件中,因此我只需按 F5:

map <F5> :!php -l %<CR>

【讨论】:

  • 请注意,这将验证保存的文件,因此如果您有未保存的更改,它将看不到它们。
  • 我们可以使用不同的键来映射吗:CTRL+P?
  • @Jimmy,我想应该是 map &lt;C-P&gt; :!php -l %&lt;CR&gt;
  • 这只是测试保存的文件,如何在保存之前测试我当前打开的文件?
  • 即使文件没有保存,也希望有一种检查语法的方法。不使用插件。
【解决方案2】:

:make 与以下 php 特定设置一起使用:

:set makeprg=php\ -l\ %
:set errorformat=%m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G

您的语法错误将出现在 Quickfix 窗口中。您可以使用:copen 或简称:cope 打开此缓冲区。如果您只想在错误时打开窗口,请使用:cwindow

您可以使用:cnext:cprev 在快速修复列表中移动以跳转到相应的错误。我建议 Tim Pope 出色的 unimpared.vim 插件让列表的移动变得像 [q]q 一样简单。

为了简化工作流程,我建议使用这样的映射:

nnoremap <f5> :update<bar>make<bar>cwindow<cr>

现在您只需点击&lt;f5&gt;,缓冲区就会被更新(如果需要)、linted,并且任何错误都会出现在 quickfix 窗口中。

要使其更加健壮,请将这些命令添加到~/.vim/after/ftplugin/php.vim。示例~/.vim/after/ftplugin/php.vim

setlocal makeprg=php\ -l\ %
setlocal errorformat=%m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G
nnoremap <buffer> <silent> <f5> :update<bar>sil! make<bar>cwindow<cr>

更多信息:

:h quickfix
:h makeprg
:h errorformat

【讨论】:

  • 当我运行此代码时,它可以工作,但会使缓冲区完全空白。
  • 所提供的映射只会写入缓冲区 *如果需要),通过 makeprg 进行 lint,如果有错误则显示快速修复窗口。除了可能将缓冲区写入磁盘之外,它不会以任何方式对缓冲区进行任何更改。您是否有机会看到一个空白的快速修复窗口?
【解决方案3】:

:w !php -l

真正的功劳归于Can I see changes before I save my file in Vim? 的想法,所以在那里投票。

但是要在这篇文章中进行解释(主要取自上面): 上述命令的工作原理如下:

  1. 在vim中保存文件的语法是:

     :w <filename>
    
  2. vim中执行shell命令的语法是:

     :!<command>
    
  3. 在没有文件名的情况下执行保存命令,而是在其后面执行 shell 命令会导致 vim 将文件内容写入 shell 的标准输入,而不是将其保存在物理文件中。您可以通过执行来验证这一点

     :w !cat
    

    这应该总是打印文件的当前内容(本来应该被写入文件)。

4 您可以通过管道输入来自STDINphp -l 来检查代码

文件被“保存”到标准输入,php lint 以标准输入作为输入运行。

【讨论】:

    【解决方案4】:

    要检查 PHP 语法而不必先保存,您可以使用:

    地图 :w !php -l

    http://vim.wikia.com/wiki/Runtime_syntax_check_for_php

    【讨论】:

      【解决方案5】:

      您应该尝试像Neomake 这样的插件。它会在每个 PHP 语法错误的排水沟错误标记中向您显示。继续在线查看错误本身。您也可以将其链接到 PHP Mess detectorPHP Stan 以向您显示代码中的错误和可能的改进。

      这个组合很强大!

      如果您有兴趣,我写了一篇文章如何制作Vim PHP IDE。这基本上是您应该尝试的基本插件列表!当然,Neomake 也是其中的一部分。

      【讨论】:

        【解决方案6】:

        对于语法高亮(有时会提供有关错误的线索)一个尚未保存的文件(通常在 vim 上是黑白的),只需获取语法文件:

        :source $VIMRUNTIME/syntax/[the syntaxfile].vim
        

        例子

        :source $VIMRUNTIME/syntax/sh.vim
        :source $VIMRUNTIME/syntax/php.vim
        :source $VIMRUNTIME/syntax/javascript.vim
        

        【讨论】:

          【解决方案7】:

          您可以手动运行 PHP linting 命令,但如果您正在使用 PHP 进行全职开发,那么使用通用语法检查插件会更容易。

          Syntastic(由 @lucapette 推荐)长期以来一直是 Vim 的主要语法插件,要求相当宽松:

          Syntastic 本身有相当宽松的要求:它没有任何外部依赖项,它需要一个带有一些通用特性的 Vim 编译版本:autocmdevalfile_in_pathmodify_fname、@ 987654330@、reltimestatuslineuser_commands。并非所有可能的功能组合(包括上述功能)在所有操作系统上都具有同等意义,但带有“普通”、“大”或“巨大”功能集的 Vim 版本 7 或更高版本应该没问题。

          从允许异步语法检查的 Vim 8 开始,现在有两个不错的插件。这些工作通过不断检查您的代码来工作,因此您不必保存代码以显示错误:

          1. Asyncronous Lint Engine (ale)
          2. Neomake(由@matthieu推荐)

          只要当前文件的语法设置为 PHP,所有这些都应该自动调用 php -l:set syntax=php,如果 Vim 不能自动识别语法)。

          【讨论】:

            猜你喜欢
            • 2017-06-29
            • 2014-11-13
            • 1970-01-01
            • 1970-01-01
            • 2012-05-06
            • 2010-10-22
            • 2013-03-08
            • 2014-03-16
            • 1970-01-01
            相关资源
            最近更新 更多