我正在使用vim与
vim-golang插件。该插件随附
a function called :Fmt,使用
gofmt(一个命令行可执行文件)“重新格式化”源代码。
我想要调用:Fmt函数每次保存文件,所以它是不断重新格式化。我认为这应该使用autocmd指令。但我有两个疑问:
>我找不到执行该功能的方法。我尝试写入Fmt和:Fmt在autocmd行的末尾,但似乎不起作用。我想我想念一些东西,比如“打电话”。
>我希望这样才能保存filetype“go”的文件。我不知道如何组合这两个条件 – 我可以激活变量取决于文件类型,我可以做小的东西,如删除尾随空格,每当一个文件被保存,但分开。
所以这是我到目前为止
" I can set variables for go like this autocmd FileType go setlocal noexpandtab shiftwidth=4 tabstop=4 softtabstop=4 nolist " I can clean trailing spaces(conserving cursor position) on save like this autocmd BufWritePre * kz|:%s/\s\+$//e|'z " None of these worked: autocmd BufWritePre,FileType go Fmt autocmd BufWritePre,FileType go :Fmt
FileType事件在缓冲区写入时不触发; BufWritePre是正确的,但您需要提供一个文件模式,例如*。走:
原文链接:https://www.f2er.com/bash/388656.htmlautocmd BufWritePre *.go Fmt
唯一的缺点是这会复制对go文件类型的检测。您可以通过挂入FileType事件来委托,然后使用特殊的< buffer>定义每个Go缓冲区的格式化autocmd。模式:
autocmd FileType go autocmd BufWritePre <buffer> Fmt
这是有缺陷的,如果文件类型被多次设置,你也会运行格式化多次。这可以通过自定义来解决:augroup,但现在变得非常复杂。或者,如果您真的确定这是Go缓冲区中唯一的BufWritePre autocmd,您可以使用:autocmd! BufWritePre …(带有!)。