java - 如何从 java 程序中执行 vimdiff 命令
问题描述
我有一个文件列表,我必须为其运行 vimdiff 命令并将输出保存为 html 文件。我正在使用 Java 执行此操作。下面是我试图执行的命令
String cmd = "vimdiff -c 'set foldlevel=9999' src/test/resources/testdata/output/html_output_before_changes/file1.html src/test/resources/testdata/output/html_output_after_changes/file2.html -c TOhtml -c 'w! different.html' -c 'qa!'"
当我运行以下代码时,代码正在执行。但我看不到文件正在生成。
Runtime rt = Runtime.getRuntime();
Process process = rt.exec(cmd);
从终端执行该命令时运行良好。但是在java程序中执行时它不起作用。有人可以帮我解决这个问题吗?我做了很多搜索,但无法继续进行。
解决方案
您正在使用: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
日志文件是否有错误。
推荐阅读
- c++ - 在 lambda 中捕获类方法
- php - PHP POST上传文件> 8.2M失败
- python - 检查字符串是否包含列表中单词的最清晰、Pythonic、可靠和最快的方法
- linux - 忙箱初始化脚本。未找到挂载
- python - python - 当在python数据框的另一列中发现重复值时,如何增加新列的值?
- c# - 目标版本 16299 与 17134 数据透视/内容演示者行为差异
- r - 如何在 geom_line 下添加区域?
- php - Ajax 检索错误不起作用 Laravel
- python - 如何使用 python 格式化 JSON 样式的文本?
- c# - 如何从作为查询字符串传递的 URL 下载文件?