不能在go代码中调用`vim`

fro*_*hem 2 command-line go

我尝试vim在go程序中调用,代码类似于:

package main

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

func main() {
        err := exec.Command("vim", "a.txt").Run()
        if err != nil {
                fmt.Println(err)
        }
        os.Exit(0)
}
Run Code Online (Sandbox Code Playgroud)

我跑了go run mycode.go然后得到了:

exit status 1
Run Code Online (Sandbox Code Playgroud)

我曾尝试多种方法来接替这个如替换Run()Start(),Output(),...,但似乎不起作用.最后,我尝试做的是尝试调用vim并停止当前的go程序.我只是想看看vim,就是这样.

Tim*_*per 7

为了使vim呈现其接口,您需要将标准输入/输出流附加到进程:

package main

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

func main() {
        cmd := exec.Command("vim", "a.txt")
        cmd.Stdin = os.Stdin
        cmd.Stdout = os.Stdout
        cmd.Stderr = os.Stderr
        err := cmd.Run()
        if err != nil {
                fmt.Println(err)
        }
        os.Exit(0)
}
Run Code Online (Sandbox Code Playgroud)

不附加流类似于从shell运行以下命令:

vim < /dev/null > /dev/null 2> /dev/null
Run Code Online (Sandbox Code Playgroud)