gpt4 book ai didi

php - 是否可以让 vim 阻止保存有解析错误的 php 文件?

转载 作者:可可西里 更新时间:2023-11-01 12:18:41 25 4
gpt4 key购买 nike

我使用 vim,希望它能阻止我保存有解析错误的 php 文件。如果我想使用例如“php -l <​​file>”来实现这一点,.vimrc 中的 autocmd 会是什么样子?

我知道我可以用类似的东西连接到 BufWritePre

autocmd FileType php autocmd BufWritePre * !php -l %

但我希望它在 php 命令失败时中止“写入”。

最佳答案

你可以在钩子(Hook)中抛出一个未捕获的异常,它会中止写入:try

function s:RunPHP()
execute '!php -l' shellescape(@%, 1)
if v:shell_error | throw 'PHP failed' | endif
endfunction

function s:DefineBWPphpevent()
augroup Run_php
autocmd! BufWritePre <buffer> :call s:RunPHP()
augroup END
endfunction

augroup Run_php
autocmd!
autocmd FileType * :autocmd! Run_php BufWritePre <buffer>
autocmd FileType php :call s:DefineBWPphpevent()
augroup END

另请注意

  1. shellescape:你不应该使用 :!shell_command %因为这里 vim 没有做正确的转义,如果文件名包含特殊符号,如空格、引号、美元、换行符,你会遇到麻烦......
  2. <buffer>代替 *在第二种模式中。您的原始命令没有为 php 文件定义自动命令,而是为所有文件类型定义自动命令(如果其中一个文件类型是 php)。
  3. autocmd 分组和 banged :autocmd! s: 它们防止重复自动命令。

顺便说一句,你想通过在旧版本文件上运行 php 来实现什么(它是 BufWritePre 事件,所以它发生在文件写入之前)?也许您应该将运行 php 的代码替换为 :w !php -l , :w !php -l -甚至 :w !php -l /dev/stdin取决于 php 接受的内容(我的系统上没有,也不想有)。

关于php - 是否可以让 vim 阻止保存有解析错误的 php 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6055880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com