gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:01:44 25 4
gpt4 key购买 nike

我使用 vim 和 vim-golang插入。这个插件自带a function called :Fmt使用gofmt“重新格式化”源代码, 一个命令行可执行文件。

我想在每次保存文件时调用 :Fmt 函数,因此它会不断重新格式化。我认为这应该通过 autocmd 来完成。指示。但我有两个疑问:

  1. 我找不到执行该功能的方法。我尝试在 autocmd 行的末尾写 Fmt 和 :Fmt ,但它似乎没有用。我想我错过了一些东西,比如“通话”。
  2. 我希望仅在保存文件类型为“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是正确的,但您需要提供文件模式,例如*.go :

autocmd BufWritePre *.go Fmt

唯一的缺点是这重复了 go 文件类型的检测。您可以通过挂接到 FileType 来委派此任务事件,然后使用特殊的 <buffer> 为每个 Go 缓冲区定义格式化 autocmd模式:

autocmd FileType go autocmd BufWritePre <buffer> Fmt

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

关于go - vim - 保存时自动格式化golang源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com