能否通过Scala REPL shell命令打开交互式vim进程?

3

我正在探索使用Scala REPL桥接到Shell。主要是通过import sys.process._包实现的,我可以使用"ls" !来执行Shell。
现在,我想使用"vi" !打开交互式vi编辑器,这确实很疯狂但非常令人兴奋。在REPL中输入命令后,终端将打开一个初始化的vi画布。不幸的是,终端没有从我的键盘读取任何输入。

有可能在REPL中打开vi吗?


我认为标准REPL无法做到这一点,但在Ammonite中应该很容易。 - jwvh
@jwvh,即使在ssh中也非常惊人。这是我想要的:%("bash", "-c", """sshpass -p '123456' ssh lorance@192.168.1.230 -t vi""") 。在amm中工作得很好!!! - LoranceChen
1
这个可能可以简化为 %sshpass("-p", "123456", "ssh", "lorance@192.168.1.230", "-t" "vi")当然,%vim "foo.txt" 也应该可以工作。或者 %python 打开一个 Python REPL,%sbt 等等。 - Li Haoyi
1个回答

1

来自https://dev59.com/02HVa4cB1Zd3GeqPnX47#29972867的答案(Java解决方案):

import java.lang.{Process, ProcessBuilder}

 System.out.println("STARTING VI");
 val processBuilder = new ProcessBuilder("/usr/bin/vi")
 processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT)
 processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT)
 processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT)

 val p = processBuilder.start()
  // wait for termination.
  p.waitFor()
System.out.println("Exiting VI")

它甚至不会破坏readline。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接