我正在探索使用Scala REPL桥接到Shell。主要是通过import sys.process._
包实现的,我可以使用"ls" !
来执行Shell。
现在,我想使用"vi" !
打开交互式vi编辑器,这确实很疯狂但非常令人兴奋。在REPL中输入命令后,终端将打开一个初始化的vi画布。不幸的是,终端没有从我的键盘读取任何输入。
有可能在REPL中打开vi吗?
我正在探索使用Scala REPL桥接到Shell。主要是通过import sys.process._
包实现的,我可以使用"ls" !
来执行Shell。
现在,我想使用"vi" !
打开交互式vi编辑器,这确实很疯狂但非常令人兴奋。在REPL中输入命令后,终端将打开一个初始化的vi画布。不幸的是,终端没有从我的键盘读取任何输入。
有可能在REPL中打开vi吗?
来自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。
ssh
中也非常惊人。这是我想要的:%("bash", "-c", """sshpass -p '123456' ssh lorance@192.168.1.230 -t vi""")
。在amm中工作得很好!!! - LoranceChen%sshpass("-p", "123456", "ssh", "lorance@192.168.1.230", "-t" "vi")
当然,%vim "foo.txt"
也应该可以工作。或者%python
打开一个 Python REPL,%sbt
等等。 - Li Haoyi