2015-05-30 51 views
2

我試圖從Java命令行程序運行交互式編輯器。作爲一個例子,這是在Python的等效代碼:無法從Java/Scala控制檯應用程序打開工作VIM編輯器

import subprocess; subprocess.call(["vim", "/tmp/hello"]) 

而且它開闢了一個vim編輯器和控制權返回給Python程序,當你完成編輯。

的「等價」的Java程序:

public class Main{ 
    public static void main(String[] args) throws java.io.IOException{ 
     new java.lang.ProcessBuilder() 
       .command("vim", "/tmp/hello2") 
       .inheritIO() 
       .start(); 

    } 
} 

不能正常打開VIM和葉我的終端,我需要繼續之前調用reset一個時髦的狀態。

的「等價」的Scala程序

object Main{ 
    def main(args: Array[String]): Unit = { 
    import sys.process._ 
    Seq("vim", "/tmp/hello2").!< 
    } 
} 

成功打開了VIM,但鍵盤導航borked,按下方向鍵的結果輸入像

^[OD^[OA^[OC^[OB 

被輸入到文本區而不是移動我的光標。

有什麼方法可以在Java/Scala中複製正確的Python行爲?

回答

1

程序vi, emacs等程序在終端程序中工作,如xterm。它們沒有設計爲在流程流中工作,這些流分別是JavaScala分別使用ProcessBuildersys.process來執行外部程序。這就是爲什麼你無法成功操作遊標,爲什麼vim無法正確打開,迫使你重置。

我還沒有嘗試過這個,但是你可以直接調用一個終端程序而不是vim並將參數傳遞給那個終端程序來打開vim

相關問題