【发布时间】:2011-09-01 14:49:46
【问题描述】:
我想知道如何在不每次都关闭 VIM 的情况下验证 PHP 文件在 VIM 中是否有效?
谢谢
【问题讨论】:
我想知道如何在不每次都关闭 VIM 的情况下验证 PHP 文件在 VIM 中是否有效?
谢谢
【问题讨论】:
你可以在 vim 中执行 shell 命令。这与从 shell 调用 php -l filename.php 相同:
:!php -l %
我已将此映射到我的 ~/.vim/after/ftplugin/php.vim 文件中,因此我只需按 F5:
map <F5> :!php -l %<CR>
【讨论】:
map <C-P> :!php -l %<CR>。
将: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>
现在您只需点击<f5>,缓冲区就会被更新(如果需要)、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
【讨论】:
:w !php -l
真正的功劳归于Can I see changes before I save my file in Vim? 的想法,所以在那里投票。
但是要在这篇文章中进行解释(主要取自上面): 上述命令的工作原理如下:
在vim中保存文件的语法是:
:w <filename>
vim中执行shell命令的语法是:
:!<command>
在没有文件名的情况下执行保存命令,而是在其后面执行 shell 命令会导致 vim 将文件内容写入 shell 的标准输入,而不是将其保存在物理文件中。您可以通过执行来验证这一点
:w !cat
这应该总是打印文件的当前内容(本来应该被写入文件)。
4 您可以通过管道输入来自STDIN 的php -l 来检查代码
文件被“保存”到标准输入,php lint 以标准输入作为输入运行。
【讨论】:
【讨论】:
您应该尝试像Neomake 这样的插件。它会在每个 PHP 语法错误的排水沟错误标记中向您显示。继续在线查看错误本身。您也可以将其链接到 PHP Mess detector 和 PHP Stan 以向您显示代码中的错误和可能的改进。
这个组合很强大!
如果您有兴趣,我写了一篇文章如何制作Vim PHP IDE。这基本上是您应该尝试的基本插件列表!当然,Neomake 也是其中的一部分。
【讨论】:
对于语法高亮(有时会提供有关错误的线索)一个尚未保存的文件(通常在 vim 上是黑白的),只需获取语法文件:
:source $VIMRUNTIME/syntax/[the syntaxfile].vim
例子
:source $VIMRUNTIME/syntax/sh.vim
:source $VIMRUNTIME/syntax/php.vim
:source $VIMRUNTIME/syntax/javascript.vim
【讨论】:
您可以手动运行 PHP linting 命令,但如果您正在使用 PHP 进行全职开发,那么使用通用语法检查插件会更容易。
Syntastic(由 @lucapette 推荐)长期以来一直是 Vim 的主要语法插件,要求相当宽松:
Syntastic 本身有相当宽松的要求:它没有任何外部依赖项,它需要一个带有一些通用特性的 Vim 编译版本:
autocmd、eval、file_in_path、modify_fname、@ 987654330@、reltime、statusline和user_commands。并非所有可能的功能组合(包括上述功能)在所有操作系统上都具有同等意义,但带有“普通”、“大”或“巨大”功能集的 Vim 版本 7 或更高版本应该没问题。
从允许异步语法检查的 Vim 8 开始,现在有两个不错的插件。这些工作通过不断检查您的代码来工作,因此您不必保存代码以显示错误:
只要当前文件的语法设置为 PHP,所有这些都应该自动调用 php -l(:set syntax=php,如果 Vim 不能自动识别语法)。
【讨论】: