Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows for Vim上清理javac输出,可能通过Unix(Cygwin)工具_Java_Bash_Vim_Javac - Fatal编程技术网

在Windows for Vim上清理javac输出,可能通过Unix(Cygwin)工具

在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/...

我是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/.../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