我想知道如何在不关闭VIM的情况下验证PHP文件在VIM中是否有效?
谢谢
答案 0 :(得分:45)
您可以在vim中执行shell命令。这与从shell调用php -l filename.php
相同:
:!php -l %
我已将其映射到我的~/.vim/after/ftplugin/php.vim
文件中,因此我只需要按F5:
map <F5> :!php -l %<CR>
答案 1 :(得分:7)
尝试https://github.com/scrooloose/syntastic(之前为https://www.vim.org/scripts/script.php?script_id=2736),这非常好。
答案 2 :(得分:7)
将:make
与以下特定于php的设置一起使用:
:set makeprg=php\ -l\ %
:set errorformat=%m\ in\ %f\ on\ line\ %l,%-GErrors\ parsing\ %f,%-G
您的语法错误将出现在Quickfix窗口中。您可以使用:copen
或:cope
打开此缓冲区。如果您只想在错误时使用:cwindow
打开窗口。
您可以使用:cnext
和:cprev
浏览quickfix列表以跳转到相应的错误。我建议蒂姆·波普的优秀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
答案 3 :(得分:1)
你应该尝试像Neomake这样的插件。它将显示每个PHP语法错误的装订线错误标记。上线看看错误本身。您也可以将其与PHP Mess detector和PHP Stan相关联,以向您显示代码中的错误和可能的改进。
这个组合非常强大!
如果您有兴趣,我写了一篇文章如何制作Vim PHP IDE。这基本上是你应该尝试的基本插件列表!当然Neomake是其中的一部分。
答案 4 :(得分:1)
:w !php -l
真正的功劳归功于Can I see changes before I save my file in Vim?,在那里的想法得到了投票。
但要对此帖子进行解释(通常是从上方获取): 上面的命令如下:
在vim中保存文件的语法是:
:w <filename>
在vim中执行shell命令的语法是:
:!<command>
执行save命令时不使用文件名,而是执行后面的shell命令,这将使vim将文件内容写入shell的stdin中,而不是将其保存在物理文件中。您可以通过执行
来验证 :w !cat
这应该始终打印文件的当前内容(原本应该写入文件中)。
4您可以通过将php -l
中的STDIN
通过管道插入来检查代码
文件已“保存”到标准输入,以标准输入作为输入运行php lint。
答案 5 :(得分:0)
答案 6 :(得分:0)
对于语法高亮(有时会提供有关错误的线索),一个尚未保存的文件(通常是vim上的黑白)只需获取语法文件:
:source $VIMRUNTIME/syntax/[the syntaxfile].vim
实施例
:source $VIMRUNTIME/syntax/sh.vim
:source $VIMRUNTIME/syntax/php.vim
:source $VIMRUNTIME/syntax/javascript.vim
答案 7 :(得分:0)
您可以手动运行PHP linting命令,但是如果您正在使用PHP进行全职开发,那么使用通用语法检查插件会更容易。
Syntastic(@lucapette的建议)一直是Vim的主要语法插件,要求相对宽松:
Syntastic本身具有相当宽松的要求:它没有任何外部依赖关系,并且需要一个具有以下一些共同功能的Vim版本:
autocmd
,eval
,file_in_path
,modify_fname
,quickfix
,reltime
,statusline
和user_commands
。并非包括所有上述功能的所有可能组合在所有操作系统上都具有同等的意义,但具有“正常”,“大”或“巨大”功能集的Vim 7或更高版本应该没问题。
自从Vim 8允许异步语法检查以来,现在有两个不错的插件。这些方法通过不断添加代码来实现,因此您无需保存代码即可显示错误:
只要该文件的语法设置为PHP(如果Vim无法自动识别该语法,则php -l
),所有这些都应自动为当前文件调用:set syntax=php
。
答案 8 :(得分:-1)