2 回答
TA贡献1862条经验 获得超6个赞
您正在使用:TOhtml并将结果写为different.html. 如果您不确定该文件的位置,请检查 Java 进程的当前工作目录,对硬盘进行文件搜索,或在 Vim 命令中指定绝对路径以确保确定。
你不会从 Vim 的操作中看到任何东西。使用process.getInputStream(),你可以得到什么样的Vim写给其操作过程中端,但也只是达到字符乱码,Vim的使用特殊的ANSI转义序列来控制终端,位置光标等
要以非交互方式使用 Vim,建议传递以下选项:
-T dumb Avoids errors in case the terminal detection goes wrong.
-n No swapfile.
-i NONE Ignore the |viminfo| file (to avoid disturbing the
user's settings).
-c 'set nomore' Suppress the more-prompt when the screen is filled
with messages or output to avoid blocking.
由于无法与 Vim 交互(从 Java 程序内部),故障排除提示是启用详细日志记录:您可以使用-V20vimlog. 退出 Vim 后,检查vimlog日志文件是否有错误。
TA贡献1776条经验 获得超12个赞
两天后,我找到了以下解决方案:
我将 vimdiff 命令添加到 shell 脚本并使用以下方法执行它,它就像一个 gem。
Java方法
try {
File[] uiDiffDir = getFiles();
for (File file : uiDiffDir) {
String[] cmd = {"sh", shellScriptPath, file1, file2,
outputfile};
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(
p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
外壳文件
vimdiff -c 'set foldlevel=9999' $1 $2 -c TOhtml -c 'w! '"$3"'' -c 'qa!'
笔记:
file1 将作为参数传递来代替 $1
file2 将作为参数传递来代替 $2
outputfile 将作为参数传递来代替 $3
添加回答
举报