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