微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 …(带有!)。

原文地址:https://www.jb51.cc/vim/388656.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐