【问题标题】:Running commands in rust (vim)在 rust (vim) 中运行命令
【发布时间】:2020-02-17 04:14:55
【问题描述】:
std::process::Command::new("/usr/bin/sh")
    .arg("-c")
    .arg("vim")
    .arg("file")
    .spawn()
    .expect("Error: Failed to run editor");

当我运行这段代码时,一个 vim 进程运行,编辑文件,虽然它没有在终端中打开(不确定确切的术语)我怎么可能/是否有可能在终端中实际打开 vim

【问题讨论】:

  • 次要挑剔:sh 通常是/bin/sh,而不是/usr/bin/sh。顺便说一句,真的有必要用 shell 运行 vim 吗?为什么不直接运行vim filestd::process::Command::new("vim").arg("file")
  • @phd 是的,我刚刚意识到关于 sh 的位置,当我在我的机器上运行 which sh 时,它说 /usr/bin/sh,但在大多数情况下,包括我的测试计算机,它/bin/sh。至于在shell中运行的必要性,如果你要在没有shell的情况下运行vim ~/foo,那么它会尝试在目录中查找~,而不是主目录
  • 您的/bin/usr/bin 的符号链接,就像在许多现代Linux 发行版中一样。

标签: vim rust command


【解决方案1】:

当我运行你的代码时,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(),而不是分成2个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多