我有两个必须始终包含有效YAML的YAML文件,所以我希望使用ale或syntastic(类似)来帮助我强制执行。
看起来,合成工作的方式是在:w
之后运行检查程序(写后)并报告任何错误。 Ale异步工作,但如果有错误,则不会阻止写入。而且它们都像广告中所说的一样运作良好。
但是如果文件未以预写挂钩的方式通过检查器,我可以使用检查器来防止文件通过:w
或:wq
写入磁盘吗?
或者是否有其他替代啤酒和合成啤酒?
缓冲区仍然必须保留(例如保存到临时文件),以便检查者能够检查它。这是额外的工作,我不确定Syntastic是否具有类似功能。
对于ALE,由于它是异步工作的,因此可以轻松完成此操作。剩下要做的就是防止出现错误时进行写操作。可以通过ale#statusline#Count()获得错误。您只需要检查BufWritePre
中的内容并中止写入即可;这可以通过BufWritePre
在处理程序中添加异常来完成:
:throw
要将其自动应用于“一对YAML文件”,您可以定义一个自定义autocmd! BufWritePre <buffer> if ale#statusline#Count(bufnr('')).error > 0 | throw "You have errors in the file; fix them first." | endif
(例如:command
),使您可以轻松设置:command
(最好在:EnforceNoErrors
内部),或者使用另一个:autocmd
自动进行此设置:
:augroup