command-line - 无法在 go 代码中调用 `vim`

标签 command-line go

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

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)
}

我运行 go run mycode.go 然后得到:

exit status 1

我已经尝试了几种方法来成功,例如将 Run() 替换为 Start()Output()...,但似乎不起作用.最后,我尝试做的是尝试调用 vim 并停止我当前的 go 程序。我只想看到 vim 出现,仅此而已。

最佳答案

为了让 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)
}

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

vim < /dev/null > /dev/null 2> /dev/null

关于command-line - 无法在 go 代码中调用 `vim`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34744648/

相关文章:

string - 如何将类型转换定义为自定义类型的字符串

macos - 去安装: no install location for directory outside GOPATH

unit-testing - 在 go 中测试连接的正确方法

go - 在 Go 中的 Javascript 变量声明中模拟 OR 运算符

unit-testing - Go 中的模拟随机生成器

command-line - 如何在mac上安装最新的ffmpeg

perl - 如何将命令行参数传递给 Perl 程序?

php - 如何将 PHP 脚本转义到外部编辑器并在之后返回?

command-line - iTerm2像Guake一样隐藏/显示

vim - 我可以在 Windows 10 的 WIndows 命令行中使用类似 vim 的命令吗?