如何在 Visual Studio 代码中 运行 `go fmt` 保存?

How to run `go fmt` on save, in Visual Studio Code?

如何将 Visual Studio 代码(或 Go 编程语言扩展)保存为 运行 go fmt(或其他 tools/commands)?甚至自动保存?

更新: 目前它在 VSCode 中运行良好;只需要在 .vscode 目录中添加一些配置文件(我使用 these).

2019 年更新: 这个问题很老了。 VSCode Go 扩展现在拥有您在 Go 中开发所需的一切。

最后更新时间 2019 顺便说一句,值得一提的是,在你的测试文件中包声明的正上方出现了一个 运行 package tests。如果单击它,您可以看到代码的代码覆盖率。覆盖和未覆盖的部分以不同的颜色突出显示。

2020 年更新 现在,VSCode 的 Go 扩展在 Go 团队的监督下!

目前无法实现,但正在处理 https://github.com/Microsoft/vscode-go/issues/14

我对 'go fmt' 不熟悉,但是您可以创建一个简单的 vscode 扩展来处理保存事件并执行任何将文件路径作为参数传递的任意命令。

这是一个示例,它只调用 echo $filepath:

import * as vscode from 'vscode';
import {exec} from 'child_process';

export function activate(context: vscode.ExtensionContext) {

    vscode.window.showInformationMessage('Run command on save enabled.');

    var cmd = vscode.commands.registerCommand('extension.executeOnSave', () => {

        var onSave = vscode.workspace.onDidSaveTextDocument((e: vscode.TextDocument) => {

            // execute some child process on save
            var child = exec('echo ' + e.fileName);
            child.stdout.on('data', (data) => {
                vscode.window.showInformationMessage(data);
            });
        });
        context.subscriptions.push(onSave);
    });

    context.subscriptions.push(cmd);
}

和包文件:

{
    "name": "Custom onSave",
    "description": "Execute commands on save.",
    "version": "0.0.1",
    "publisher": "Emeraldwalk",
    "engines": {
        "vscode": "^0.10.1"
    },
    "categories": [
        "Other"
    ],
    "activationEvents": [
        "onCommand:extension.executeOnSave"
    ],
    "main": "./out/src/extension",
    "contributes": {
        "commands": [{
            "command": "extension.executeOnSave",
            "title": "Execute on Save"
        }]
    },
    "scripts": {
        "vscode:prepublish": "node ./node_modules/vscode/bin/compile",
        "compile": "node ./node_modules/vscode/bin/compile -watch -p ./"
    },
    "devDependencies": {
        "typescript": "^1.6.2",
        "vscode": "0.10.x"
    }
}

扩展通过 cmd+shift+p 启用,然后输入 "Execute on Save",但它可以重新配置为通过另一个命令启动,包括“*”,这将导致它随时加载 VSCode负载。

启用扩展后,每当保存文件时都会触发事件处理程序(注意:这在首次创建文件或另存为...时似乎不起作用)

这只是此处概述的 yo 代码脚手架扩展的微小修改:https://code.visualstudio.com/docs/extensions/example-hello-world

更新

这是我为 运行 文件保存命令编写的 Visual Studio 代码扩展。 https://marketplace.visualstudio.com/items/emeraldwalk.RunOnSave.

现在,该功能已经实现,您可以在保存时启用格式:

  1. 打开设置 (Ctrl + ,)
  2. 搜索 editor.formatOnSave 并将其设置为 true

您的 Go 代码将在 Ctrl + s

上自动格式化

我是用CTRL+S手动保存文件的(这对我来说是习惯性的)。但是,我在 VS Code 中有一个不同的绑定,它将以 CTRL+S 开头(例如,swagger 扩展有一个和弦,其中按 CTRL+S CTRL+W 会生成 swagger 注释)。这导致 VS Code 等待我按下第二个和弦 (CTRL+W),因此它完全忽略了保存部分。我将所有以 CTRL+S 作为第一个和弦的键绑定和弦重新配置为不同的组合。在此之后,按 CTRL+S 使用 gofmt 正确格式化了我的文件。