如何在Visual Studio Code中保存`go fmt`?

时间:2015-11-20 13:55:45

标签: go visual-studio-code

如何使用Visual Studio代码(或Go编程语言扩展)在保存时运行go fmt(或其他工具/命令)?甚至自动保存?

更新 它现在完全在VSCode内部工作,此时;只需要在 .vscode 目录中添加一些配置文件(我使用these)。

3 个答案:

答案 0 :(得分:8)

目前不可能,但它正在https://github.com/Microsoft/vscode-go/issues/14

上工作

答案 1 :(得分:5)

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

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

You Go代码将在Ctrl + s上自动格式化

答案 2 :(得分:2)

我不熟悉' go fmt'具体来说,你可以创建一个简单的vscode扩展来处理save事件并执行任何传递文件路径作为参数的任意命令。

这是一个只调用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启用扩展,然后键入"执行保存"但可以重新配置以通过另一个命令启动,包括" *"这将导致它在VSCode加载的任何时候加载。

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

这只是对yo code scaffolded extension的一个小修改,如下所述:https://code.visualstudio.com/docs/extensions/example-hello-world

<强>更新

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