vim

让 Vim 在保存时自动调用外部命令进行格式化

肯定有许多人遇到过这个问题,也肯定有许多现成的解决方案被发现,可是我没找到(或者说没耐心找)。无所谓,自己找到的话,得到的就不仅仅是最终结果了。

闲话少说。其实以前也干过类似的事情,就是在保存的时候自动去掉所有的行末空白;不过这个操作使用 Vim 本身的功能就能实现,不需要借助于外部程序,所以只要简单地设一个 BufWrite 时的自动命令就行了。但当需要借助外部程序的时候,在 BufWrite 或者 BufWritePre 或者 FileWritePre 时执行的自动命令就不行了,老是提示说什么文件本身已更改,是否确定写入。我在这上面反覆试了好多次,才发现是自己没有搞清楚底下到底发生了什么。要让外部程序对文件内容进行格式化(或者其他什么操作。我想调的是 gofmt,顺带一提),首先当然得要那个外部程序能看到你做过的,还没有保存的更改,所以说应该是先写入再操作的,即在 BufWritePost 的时候执行自动命令。而我一开始就把基本步骤给搞反了。