vim – 保存时自动格式化golang源代码

我正在使用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是正确的,但您需要提供一个文件模式,例如*。走:
autocmd BufWritePre *.go Fmt

唯一的缺点是这会复制对go文件类型的检测。您可以通过挂入FileType事件来委托,然后使用特殊的< buffer>定义每个Go缓冲区的格式化autocmd。模式:

autocmd FileType go autocmd BufWritePre <buffer> Fmt

这是有缺陷的,如果文件类型被多次设置,你也会运行格式化多次。这可以通过自定义解决:augroup,但现在变得非常复杂。或者,如果您真的确定这是Go缓冲区中唯一的BufWritePre autocmd,您可以使用:autocmd! BufWritePre …(带有!)。

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...