std::process::Command::new("/usr/bin/sh")
.arg("-c")
.arg("vim")
.arg("file")
.spawn()
.expect("Error: Failed to run editor");
当我运行这段代码时,会启动一个vim进程来编辑文件,但它并没有在终端中打开(不确定确切术语),有什么办法可以让vim在终端中打开吗?
vim
确实在终端中打开了,但我的shell也在同一个终端中运行,而且vim和shell互相争夺屏幕显示,并且它们都接收我键入的任何键。如果你也遇到了这个问题,你需要在子进程上使用wait方法:std::process::Command::new("/usr/bin/sh")
.arg("-c")
.arg("vim")
.arg("file")
.spawn()
.expect("Error: Failed to run editor")
.wait()
.expect("Error: Editor returned a non-zero status");
.wait()
,另外值得注意的是,我必须将“vim文件”作为它自己的.arg()
使用,而不是分为两个。 - isocseles
/bin/sh
,而不是/usr/bin/sh
。顺便问一下,用 shell 运行vim
真的有必要吗?为什么不直接运行vim file
呢?可以使用std::process::Command::new("vim").arg("file")
... - phdwhich sh
时,它显示为/usr/bin/sh,但在大多数其他机器上,包括我的测试电脑,则为/bin/sh。至于在shell中运行的必要性,如果您不使用shell运行vim〜/foo
,那么它将尝试查找~目录,而不是主目录。 - isocseles/bin
是一个符号链接到/usr/bin
,就像许多现代 Linux 发行版一样。 - phd