使用 `vim` 编辑 .jar

ile*_*ile 8 linux vim jar

在 Amazon Linux 实例上,我尝试通过 Putty 远程编辑 jar 文件。vim提供了一个方便的导航器,它显示一个提示,其中包含 jar 中包含的文件的列表:

> vim filename.jar

" zip.vim version v22
" Browsing zipfile /home/ec2-user/tigase/libs/tigase-muc.jar
" Select a file with cursor and press ENTER

      453  01-14-2013 10:01   META-INF/MANIFEST.MF
      110  01-14-2013 10:01   META-INF/maven/tigase/tigase-muc/pom.properties
     4675  01-14-2013 10:01   META-INF/maven/tigase/tigase-muc/pom.xml
     5751  01-14-2013 10:01   tigase/component/AbstractComponent.class
     2337  01-14-2013 10:01   tigase/component/AbstractComponent$1.class
     ....
Run Code Online (Sandbox Code Playgroud)

但是在选择一个文件(例如 AbstractComponent.class)并按 Enter 后,在 vim 中我得到:

caution: filename not matched:       5751  01-14-2013 10:01   tigase/component/AbstractComponent.class
Run Code Online (Sandbox Code Playgroud)

并且文件打不开。

作为旁注,我还注意到,如果我提取 jar(使用unzipjar)并使用 vim 打开提取的文件,则内容格式错误:

Êþº¾^@^@^@2^A^[^H^@     ^H^@
^H^@^K^H^@^U^H^@^V^H^@!^H^@#^H^@^^A^@) stanza already with type='...
^A^@^C()I^A^@^C()V^A^@^C()Z^A^@^F<init>^A^@^NDEFAULT_WRITER^A^@^WFE...
....
Run Code Online (Sandbox Code Playgroud)

任何想法如何克服错误或格式问题?

sle*_*ske 4

然而,在选择一个文件(例如 AbstractComponent.class)并按 Enter 键后,在 vim 中我得到:

注意:文件名不匹配

这可能是 vim ZIP 插件中的一个已知错误 - 该插件无法正确处理包含 ZIP 注释的 ZIP 文件。请参阅例如此邮件列表帖子

作为旁注,我还注意到,如果我提取 jar(使用 unzip 或 jar)并使用 vim 打开提取的文件,内容格式错误

这是因为 JAR 中的大多数文件都是编译后的 Java 类文件(文件后缀.class)。这些是二进制数据,vim 并不真正适合编辑它们,因为 vim 是文本编辑器,而不是二进制编辑器。

您可以使用命令在 vim 中编辑它们xxd(请参阅vim 文档中的“使用 xxd” ),也可以使用十六进制编辑器,例如bvi

无论如何,直接查看类文件的内容很少有帮助,因为您需要了解二进制类文件格式才能读取它们。

您能解释一下为什么要尝试打开 JAR 中的文件吗?那么也许我们可以提供帮助。