Bearbeiten eines .jars mit `vim`


8

Auf einer Amazon Linux-Instanz versuche ich, eine JAR-Datei über Putty remote zu bearbeiten. vimbietet einen praktischen Navigator, der eine Eingabeaufforderung mit einer Liste der im JAR enthaltenen Dateien anzeigt:

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

Nachdem ich jedoch eine Datei ausgewählt habe (z. B. AbstractComponent.class) und die Eingabetaste gedrückt habe, erhalte ich in vim:

caution: filename not matched:       5751  01-14-2013 10:01   tigase/component/AbstractComponent.class

und die Datei wird nicht geöffnet.

Als Randnotiz habe ich auch festgestellt, dass der Inhalt falsch formatiert ist , wenn ich das Glas (entweder mit unzipoder jar) extrahiere und eine extrahierte Datei mit vim öffne:

Êþº¾^@^@^@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...
....

Irgendwelche Ideen, wie Sie das Fehler- oder Formatierungsproblem beheben können?


2
Sie wissen, dass jar im Grunde eine Zip-Datei ist und dass .class-Dateien Java-Bytecode-Dateien sind? Das heißt, es handelt sich nicht um Textdateien, sondern nur um Datencontainer, und Sie benötigen einen dekompilierten (oder einen Hex-Editor und ein stabiles Auge), um sie zu lesen.
Bobby

Antworten:


4

Nachdem ich jedoch eine Datei (z. B. AbstractComponent.class) ausgewählt und die Eingabetaste gedrückt habe, erhalte ich in vim:

Achtung: Dateiname stimmt nicht überein

Dies ist wahrscheinlich ein bekannter Fehler im ZIP-Plugin von vim - das Plugin verarbeitet ZIP-Dateien, die ZIP-Kommentare enthalten, nicht richtig. Siehe zB diesen Mailinglistenbeitrag

Als Randnotiz habe ich auch festgestellt, dass der Inhalt falsch formatiert ist, wenn ich das JAR (entweder mit Unzip oder JAR) extrahiere und eine extrahierte Datei mit vim öffne

Dies liegt daran, dass die meisten Dateien in einer JAR kompilierte Java-Klassendateien sind (Dateisuffix .class). Dies sind Binärdaten, und vim eignet sich nicht wirklich zum Bearbeiten, da vim ein Texteditor und kein Binäreditor ist .

Sie können sie in vim mit dem xxdBefehl bearbeiten (siehe "Verwenden von xxd" in den vim-Dokumenten ), oder Sie können einen Hex-Editor wie bvi verwenden .

In jedem Fall ist das direkte Anzeigen des Inhalts einer Klassendatei selten hilfreich, da Sie das binäre Klassendateiformat verstehen müssen, um sie lesen zu können.

Können Sie erklären, warum Sie versuchen, Dateien in einer JAR zu öffnen? Dann können wir vielleicht helfen.


'Grats on 10k! ~
Sathyajith Bhat

Ich hatte anscheinend nicht an .java als an .class (kompilierte Binärdateien) gedacht und erwartet, diese Dateien direkt bearbeiten zu können, dh nicht extrahieren - bearbeiten - komprimieren zu müssen. Ich werde nachschlagen und 'xxd' versuchen, vielen Dank!
Ile

@Sathya: Danke, ich habe gerade die Nachricht bekommen :-).
Sleske

1

So habe ich die Formatierungsprobleme gelöst.

Installieren Sie zuerst Emacs

 yum install emacs

Verwenden Sie dann den folgenden Befehl, um den Inhalt zu lesen

emacs somejar.jar

Wählen Sie den Inhalt aus und drücken Sie Enter

Drücken Sie zum Speichern und Beenden des Editors Cx Cs (Strg + x, gefolgt von Strg + s).

Quelle: Verwendung des Emacs-Editors unter Linux


4
Die Frage ist, wie man diesen Job macht vim.
Artificerpi

Diese Antwort ist nicht thematisch, hilft der Community nicht und folgt dem Muster: Haben Sie ein (kleines?) Problem mit dem X - PLZ - Schalter und beginnen Sie mit der Verwendung von Y.
kgadek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.