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

时间:2019-12-06 04:56:30

标签: vim vim-plugin syntastic

我有几个必须始终包含有效YAML的YAML文件,所以我希望使用alesyntastic(类似)来帮助我强制执行。

看起来合成工作的方式是在:w之后运行检查程序(写后)并报告任何错误。 Ale异步工作,但如果有错误,则不会阻止写入。而且它们都像广告中一样出色。

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

或者有其他替代啤酒和合成啤酒吗?

1 个答案:

答案 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 ...