macos - 如何从 go 启动 vim?

标签 macos vim process go system

我有一个用 Golang 编写的命令行工具,我需要从中启动 vim。但是,它不起作用,并且没有任何错误或其他任何问题。我已将代码缩减为:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("vim", "test.txt")
    err := cmd.Run()
    fmt.Println(err)
}

当我运行它时,我可以看到 vim 进程 2-3 秒,但应用程序实际上并没有打开。然后程序以“退出状态 1”简单地退出(并且 vim 进程关闭)。

我也试过这个来捕获标准错误:

package main

import (
    "bytes"
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("vim", "test.txt")
    var stderr bytes.Buffer
    cmd.Stderr = &stderr
    err := cmd.Run()
    fmt.Println(err)
    fmt.Println(stderr)
}

但在这种情况下,程序会无限期地卡住。

知道可能是什么问题吗?

最佳答案

从调用程序传递 stdinstdout 如果它是从终端运行的(可能是命令行程序)将为您启动 vim 并返回控制用户何时完成文件编辑。

package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    cmd := exec.Command("vim", "test.txt")
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    err := cmd.Run()
    fmt.Println(err)
}

关于macos - 如何从 go 启动 vim?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21513321/

相关文章:

vim - 如何在 vim + fzf 中启用 AG

vim - 当我在 Chrome 中保存对 html 文件的更改时自动重新加载浏览器?

C - 从单亲 fork

macos - Wine64 是如何应对 macOS 的?

macos - 框架与 bundle

Vim:将 Shift-Cmd-Opt-Ctrl 重新映射为 Escape

c - 如何从 PROC 获取有关子进程的信息

node.js - Promise 解析为子流 stdout 并拒绝子流 stderr

Java路径zeromq设置

macos - 使用 Xamarin Mac、C# 的跨浏览器、跨平台 native 消息传递