Vim 我可以使用ale或syntastic作为写前钩子而不是写后钩子吗?

Vim 我可以使用ale或syntastic作为写前钩子而不是写后钩子吗?,vim,vim-plugin,syntastic,Vim,Vim Plugin,Syntastic,我有两个YAML文件,它们必须始终包含有效的YAML,所以我希望使用(类似)或帮助我强制执行 syntastic的工作方式似乎是在:w之后运行检查程序(后期写入)并报告任何错误。Ale异步工作,但在出现错误时不阻止写入。正如广告所宣传的那样,它们都很有效 但是,如果文件没有以某种预写钩子的方式通过检查程序,我可以使用检查程序来防止文件以:w或:wq写入磁盘吗 或者,是否有ale和syntastic的替代方案可以实现这一点?为了让检查器能够检查缓冲区,仍然必须保留缓冲区(例如临时文件)。这是额外的

我有两个YAML文件,它们必须始终包含有效的YAML,所以我希望使用(类似)或帮助我强制执行

syntastic的工作方式似乎是在
:w
之后运行检查程序(后期写入)并报告任何错误。Ale异步工作,但在出现错误时不阻止写入。正如广告所宣传的那样,它们都很有效

但是,如果文件没有以某种预写钩子的方式通过检查程序,我可以使用检查程序来防止文件以
:w
:wq
写入磁盘吗


或者,是否有ale和syntastic的替代方案可以实现这一点?

为了让检查器能够检查缓冲区,仍然必须保留缓冲区(例如临时文件)。这是额外的努力,我不确定Syntastic是否有类似的东西

对于ALE,由于它是异步工作的,所以可以很容易地做到这一点。剩下要做的就是防止发生错误时写入。误差可通过以下方式获得:;您只需将其签入并中止写入;这可以通过在处理程序中抛出异常来实现:

autocmd! BufWritePre <buffer> if ale#statusline#Count(bufnr('')).error > 0 | throw "You have errors in the file; fix them first." | endif

为了让检查器能够检查缓冲区,缓冲区仍然必须被持久化(例如临时文件)。这是额外的努力,我不确定Syntastic是否有类似的东西

对于ALE,由于它是异步工作的,所以可以很容易地做到这一点。剩下要做的就是防止发生错误时写入。误差可通过以下方式获得:;您只需将其签入并中止写入;这可以通过在处理程序中抛出异常来实现:

autocmd! BufWritePre <buffer> if ale#statusline#Count(bufnr('')).error > 0 | throw "You have errors in the file; fix them first." | endif