在Windows for Vim上清理javac输出,可能通过Unix(Cygwin)工具
我是Java新手,在Windows 10上安装了以下JDK:在Windows for Vim上清理javac输出,可能通过Unix(Cygwin)工具,java,bash,vim,javac,Java,Bash,Vim,Javac,我是Java新手,在Windows 10上安装了以下JDK: C:\Program Files\AdoptOpenJDK\jdk-11.0.8.10-openj9 我可以从Cygwin的Bash命令行调用编译器javac 在x终端中,但它会产生许多错误,这些错误似乎会导致 不是stdout,也不是stderr。我需要把它们归档 我可以用Vim阅读 这是我的调用命令 # mk.bash # ------- javac \ -classpath "/c/Program Files/...
C:\Program Files\AdoptOpenJDK\jdk-11.0.8.10-openj9
我可以从Cygwin的Bash命令行调用编译器javac
在x终端中,但它会产生许多错误,这些错误似乎会导致
不是stdout,也不是stderr。我需要把它们归档
我可以用Vim阅读
这是我的调用命令
# mk.bash
# -------
javac \
-classpath "/c/Program Files/.../cplex.jar" \
TestSetup.java
正如我所说,classpath参数在这里是不相关的
只想专注于在Vim Persuble中捕获javac的输出
对
发出./mk.bash>| mk.out生成一个空的mk.out
/mk.bash 2>&1>| mk.out。我几十年来一直使用后一种模式
将stderr重定向到stdout并覆盖目标文件
我可以使用script命令将javac输出发送到mk.out:
然后,我可以使用Vim浏览错误消息。但是,
内容被许多二进制字符混淆,图像和链接到下面的文件。通常,我可以
用dos2unix清理凌乱的文件,但在这个输出上,它将到期退出
转换为二进制字符
作为清理非文本内容的另一种方式,Vim有一个
fileformat=dos选项,可使用以下选项输入:e++ff=dos%。
e和%表示编辑当前文件,而++ff=dos表示
将文件解释为dos格式ff是fileformat。全部的
这样做是为了清理由于不同线条而产生的视觉瑕疵
Unix和DOS中的结尾。所有的错误消息仍然散布
看起来像是转义字符^[
有没有办法让javac只生成纯文本
输出或清理输出
以下是Vim中非纯文本文件的图像:
我怀疑它是否有那么大的相关性,但我正在关注这个网页以
编译一个调用第三方的简单Java应用程序TestSetup.Java
工具:。前面的底线
下面的Bash命令从发送stdout和stderr
javac到屏幕和文件mk.out:
它是如何被发现的
我发现问题主要是Bash管道的使用,
重定向和脚本命令。后者负责
ANSI代码。我以前无法确定这一点,因为我可以
不在没有脚本的文件中捕获javac错误消息
我首先解决了这个问题,然后将脚本的使用与
缺少脚本。这是我发现的
下面的bash命令创建不带ANSI的DOS格式文件
代码:
以前,我有:12>&1>|mk.out而不是2>|mk.out 2>&1。对于选项1,我认为stderr是针对
stdout,所以我只需要将stdout指向mk.out
但它不是这样工作的。在选项1中,规范2>&1
将stderr指向stdout当前指向的对象,即
屏幕。随后的>| mk.out然后指示stdout并且仅指示stdout
从std.out到mk.out。不幸的是,这意味着STDER是
仍然在屏幕上。Presto,mk.out被保留为空
在选项2中,stdout首先被定向到mk.out
2> &1然后将stderr指向stdout指向的对象,即。,
因此,javac错误消息被发送到mk.out。
它没有包含ANSI代码,这很好
虽然选项2可以工作,但它并不理想;错误消息并不理想
显示在屏幕上。这是我回到脚本并找到的地方
它引入了ANSI代码:
script \
-c "javac -classpath '/Some/NonExistent/File.jar' TestSetup.java" \
mk.out
因为上面解决了重定向stderr的问题,所以
用于避免脚本的bash选项。以下命令将stderr发送到
屏幕和至mk.out的按钮:
根据上面选项1的解释,看起来是这样的
不应该工作,但是Bash在
具体来说,stderr被重定向到stdout是什么
定向到,但仅在所有重定向之后。在管道中
上面的意思是javac的stdout指向tee的stdin,
只有这样,javac的stderr才指向
javac的stdout,即tee的stdin
供参考:初始解决方案javac的Xstdout选项
我发现javac有一个命令行选项-Xstdout OutputFileName.txt专门用于此目的
不幸的是,并不是我在网上找到的所有javac文档都显示了这个选项的可用性
该页面上还显示了许多vim备选方案,以及
如果需要的话,为了将来的参考,我发现有3页是
有关建议包括:
提到了Ansi2Text,但你需要Ubuntu来实现这一点。这些是ANSI颜色代码转义。你是如何运行javac的?我怀疑其中涉及到某种着色包装脚本。我正在使用上面的3个bash命令调用1-command mk.bash,从脚本mk.out开始。作为一个附加的搜索步骤,我向s发布了javac-helpee,如果可能有命令行选项来强制纯文本,但没有什么明显的。我希望环境变量可能是一种可能性,但我不知道。另外,我在xterm中使用Bash来调用ja
安装在Windows.Vim上的vac表明javac是二进制的,所以如果它是一个包装器,它就不是一个脚本。我还从DOS命令行尝试了javac-classpath c:\Program\Files\…\cplex.jar TestSetup.java 2>mk.out。mk.out中的输出没有ANSI颜色代码转义。我需要从Bash中找到一种方法来实现这一点。我接下来要做的是比较DOS和Bash命令行中的环境变量。我认为使用像maven或ant这样的实际java构建工具,而不是像你所期望的那样强迫cygwin和javac玩,你会有更多的运气。谢谢,我一定会记住maven。然而,我不是一名软件开发人员,我知道为了长期的利益,熟悉开发环境和工具是一项相当大的任务。我必须小心如何将有限的时间分配给范围有限的任务。同时,我发现DOS和Bash之间唯一可能的环境变量差异是TERM,但这并没有改变任何东西。维姆的命令确实起到了帮助作用。
javac -classpath /Some/NonExistent/Jar/File.jar TestSetup.java \
2>&1 | tee mk.out
javac -classpath '/Some/NonExistent/File.jar' TestSetup.java \
>| mk.out 2>&1
script \
-c "javac -classpath '/Some/NonExistent/File.jar' TestSetup.java" \
mk.out
javac -classpath /Some/NonExistent/Jar/File.jar TestSetup.java \
2>&1 | tee mk.out