我该如何在我的Java应用程序中从同一个终端打开vi编辑器?

3
我该如何从我的Java应用程序中打开vi编辑器? 我已经尝试过这个。
Process p = new ProcessBuilder("xterm","-e","vi /backup/xyz/test/abc.txt").start();  

int exitVal = p.waitFor();
System.out.println("Exited with error code "+exitVal);

但这会在新终端中打开vi编辑器。我想让vi编辑器在我的应用程序正在运行的同一个终端中打开


Java进程是否在安装VI的同一台机器上运行? - MadProgrammer
2个回答

2
问题在这里被强调: 如何在commons-exec下从Java启动VI? 但是自从Java 1.7,您可以使用下一个示例来透明地重定向并具有完整的控制台功能。
    System.out.println("STARTING VI");
     ProcessBuilder processBuilder = new ProcessBuilder("/usr/bin/vi");
     processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
     processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
     processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);

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

这将允许您透明地打开VI。

2
应该很简单:不要使用xterm,直接启动vi:
Process p = new ProcessBuilder("vi", "/backup/xyz/test/abc.txt").start();  

如果您想为vi添加更多命令行参数,请将它们作为单独的字符串添加,而不是在第一个参数的""内部。
启动类似vi这样的终端程序自然需要从可见终端启动java应用程序,以便vi有一个可用的终端,但我假设这已经实现了。

所以如果我只使用 Process p = new ProcessBuilder("vi /backup/xyz/test/abc.txt").start();它可以编译,但在运行时会给出以下错误无法运行程序“vi /backup/xyz/test/abc”:java.io.IOException: error=2,没有那个文件或目录 - san2505
@san2505 我让答案更具体了。 - hyde
@san2505 - 你可能需要使用实际存在于你的机器上的路径。我相信那只是一个例子... - jahroy
1
但是当我运行这个命令时,它卡住了并且什么也没做。我认为vi在后台运行。有没有办法将它拉到同一个终端? - san2505
如果您在终端上按下ctrl-C以终止Java程序,然后从命令行运行vi,会发生什么? - hyde
显示剩余2条评论

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