Reputation: 4139
I try to call vim
within go program, which code similar to this:
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)
}
I ran go run mycode.go
then got:
exit status 1
I have tried several ways to succeed this e.g. replace Run()
by Start()
, Output()
, ...
, but it seems not work. Finally, What I try to do is I try to call vim
and stop my current go program. I just want to see vim
appear, that's all.
Upvotes: 2
Views: 266
Reputation:
In order for vim to render its interface, you need to attach the standard input/output streams to the process:
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)
}
Not attaching the streams is similar to running the following command from your shell:
vim < /dev/null > /dev/null 2> /dev/null
Upvotes: 7