【问题标题】:vim-go deleting unused code when write to diskvim-go 在写入磁盘时删除未使用的代码
【发布时间】:2014-11-09 02:10:37
【问题描述】:

我已经将几个包导入到 Go 包 (package commands) 中的一个文件中,我正在使用 Vim 和 Vim-Go 插件编写(跟随 golang 教程)。其中一些包尚未在包中使用。当我保存文件:w 时,Vim 似乎正在删除未使用的包,这真的很烦人,因为这些未使用的包将被使用。我只是没有为他们添加必要的代码。有没有办法在 Vim-Go 中关闭此功能,还是我必须删除整个插件才能摆脱这种烦人的行为?

写之前

package commands
import (
    "fmt"
    "os"
    "time"

    rss "github.com/jteeuwen/go-pkg-rss"
    "github.com/spf13/cobra"
    "github.com/spf13/viper"
)

保存后

import (
    "github.com/spf13/cobra"
    "github.com/spf13/viper"
)

【问题讨论】:

    标签: vim go


    【解决方案1】:

    这是因为您使用goimports 作为格式化 go 代码时使用的工具(我认为 vim-go 默认情况下会这样做 - 并且默认情况下会在保存时格式化代码)。 goimports 为您删除未使用的导入 .. 这就是它如此出色的原因。你会在某个时候学会爱上它:)

    目前,您要使用gofmt 来格式化您的代码,它不涉及导入——它只是格式化代码。你可以把它放在你的.vimrc

    let g:go_fmt_command = "gofmt"
    

    如果您在完成上述操作后决定要在文件上手动运行goimports .. 您可以运行:GoImports

    如果您愿意,还可以选择其他选项:您可以通过将其放入 .vimrc 来关闭保存时的格式化:

    let g:go_fmt_autosave = 0
    

    然后,您仍然可以在格式化代码时使用goimports .. 但它不会在保存时自动执行此操作。

    【讨论】:

    • 谢谢,这是非常奇怪的默认行为 imo,因为它不鼓励频繁保存文件,除非您强迫自己进入仅在使用代码后才导入包的奇怪行为,这绝对是愚蠢的,因为您可以在 OP 中为需要在代码中使用的包自定义名称(例如,参见rss
    • 这并不奇怪 - goimports 可以双向工作。如果您启动一个新文件并输入http.ListenAndServe(":8080", nil) - 它会自动为您导入net/http。如果删除该行,它将删除导入。由于未使用的导入是编译器错误,因此可以节省大量的文件跳转和击键次数。如果您决定要使用net/http,则必须跳转到您的导入..手动导入它..跳回..等等。goimports 保存所有这些。
    • 好的,我还没有偶然发现。尽管如此,我宁愿不使用它。感谢您的帮助。
    • 完全没问题。快乐地鼠:)
    • 公平地说,它确实在 vim-go github README 中声明...所以它就在首页上。 “Braindead 仓鼠”在自述文件中时非常苛刻。也就是说,Go 团队强烈鼓励人们通过 gofmt 运行他们的代码 .. 所以在插件中默认启用它并不太离谱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2016-02-28
    • 2017-01-07
    • 2018-11-07
    • 2017-04-24
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多