在neovim中使用:w保存.go文件会导致文件混乱

rdlzhqv9  于 2023-06-27  发布在  Go
关注(0)|答案(1)|浏览(139)

我对Vim和Go还很陌生。我想写一个简单的go文件。当我用:w保存我的文件时,文件完全乱了。似乎没有任何语法或格式错误。似乎有一些autocmd正在运行,但我不知道是什么。我该如何调试它?这是我的档案:

package main

import (
  "net/http"

  "github.com/gin-gonic/gin"
)

func main() {
  router := gin.Default()

  api := router.Group("/api")
  {
    api.GET("/hello", func (ctx *gin.Context) {
      ctx.JSON(200, gin.H{"msg": "world"})
    })
  }

  router.NoRoute(func (ctx *gin.Context) {
    ctx.JSON(http.StatusNotFound, gin.H{})
  })

  router.Run(":8080")
}

当我尝试在neovim中使用:w保存时,我的文件变得一团糟。下面是:w之后的文件:

package main

import (
  "net/http"
  api := router.Group("/api")

    "github.com/gin-gonic/gin"

func main() {
    router := gin.Default()

  "github.com/gin-gonic/gin"

)

func main() {

  router := gin.Default()

  api := router.Group("/api")

  {
      ctx.JSON({
 gi  api.GET(n/hello", fu.c (c{x *gin.Consexg) {"       c}x.JSON(
   .StatusNotFound, gin.H{})})
  }

  router.NoRoute(func (ctx *gin.Conxt) {
    ctxNStaus"github.com/gin-gonic/gin"

NotFound, gin.H{})
  })

  router.Run(":8080")
}

我不知道发生了什么事。

sauutmhj

sauutmhj1#

这应该意味着您正在使用vim-go plugin,默认配置为在保存Go文件时自动运行:GoFmt
该文件会根据Go约定自动格式化。
例如,如果保存此文件:

package main

func main() {
fmt.Println("Hello, world!")
}

它将被自动重写为正确的格式:

package main

func main() {
  fmt.Println("Hello, world!")
}

此外,您可以通过在vim配置文件中添加以下行来配置vim-go使用goimports而不是gofmt

let g:go_fmt_command = "goimports"

这不仅可以格式化代码,还可以管理导入(例如,通过插入任何丢失的导入)。
如果您发现自动格式化导致问题或减慢Vim,您可以通过在vim配置文件中添加以下行来禁用此功能:

let g:go_fmt_autosave = 0

在禁用保存时自动格式化后,您仍然可以通过在Vim中运行:GoFmt来手动格式化代码。

相关问题