我有一个用 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)
}
但在这种情况下,程序会无限期地卡住。
知道可能是什么问题吗?
最佳答案
从调用程序传递 stdin
和 stdout
如果它是从终端运行的(可能是命令行程序)将为您启动 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/