Редактирование .jar с помощью `vim`

6474
ile

На экземпляре Amazon Linux я пытаюсь редактировать файл JAR удаленно через замазку. vimпредоставляет удобный навигатор, который отображает подсказку со списком файлов, содержащихся в банке:

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

Однако после выбора файла (например, AbstractComponent.class) и нажатия Enter, в vim я получаю:

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

и файл не открывается.

В качестве примечания я также заметил, что если я извлекаю jar (либо с помощью, unzipлибо jar) и открываю извлеченный файл с помощью 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... .... 

Есть идеи, как преодолеть ошибку или проблему форматирования?

7
Вы знаете, что jar - это в основном zip, а файлы .class - это файлы байт-кода Java? Это означает, что это не текстовые файлы, а встроенные контейнеры данных, и для их чтения вам потребуется декомпилированный (или шестнадцатеричный редактор и постоянный взгляд). Bobby 10 лет назад 2

2 ответа на вопрос

4
sleske

Однако после выбора файла (например, AbstractComponent.class) и нажатия Enter, в vim я получаю:

Внимание: имя файла не совпадает

Вероятно, это известная ошибка в ZIP-плагине vim - плагин неправильно обрабатывает ZIP-файлы, содержащие комментарии ZIP. Смотрите, например, этот список рассылки

В качестве примечания я также заметил, что если я извлекаю jar-файл (либо с помощью unzip, либо jar-файла) и открываю извлеченный файл с помощью vim, содержимое будет отформатировано

Это связано с тем, что большинство файлов внутри JAR являются скомпилированными файлами классов Java (суффикс файла .class). Это двоичные данные, и vim не очень подходит для их редактирования, потому что vim - это текстовый редактор, а не бинарный редактор.

Вы можете редактировать их в vim, используя xxdкоманду (см. «Использование xxd» в документации vim ), или вы можете использовать шестнадцатеричный редактор, такой как bvi .

Во всяком случае, непосредственный просмотр содержимого файла класса редко бывает полезен, так как для их чтения необходимо понимать формат файла двоичного класса.

Не могли бы вы объяснить, почему вы пытаетесь открыть файлы внутри JAR? Тогда, может быть, мы можем помочь.

Грейтс на 10к! ~ Sathya 10 лет назад 0
Я, очевидно, отошел от мысли о .java как о .class (скомпилированных двоичных файлах) и ожидал, что смогу редактировать эти файлы напрямую, то есть не нужно извлекать - редактировать - сжимать. Я посмотрю и попробую 'xxd', спасибо большое! ile 10 лет назад 0
@ Сатья: Спасибо, я только что получил сообщение :-). sleske 10 лет назад 0
1
John Joe

Вот как я решил проблемы с форматированием.

Первая установка Emacs

 yum install emacs 

Затем используйте команду ниже, чтобы прочитать содержимое

emacs somejar.jar 

выберите содержимое и нажмите Enter

Чтобы сохранить и выйти из редактора, нажмите Cx Cs (Ctrl + x, а затем Ctrl + s).

Источник: Как использовать редактор Emacs в Linux

Вопрос в том, как сделать эту работу с `vim`. artificerpi 6 лет назад 1

Похожие вопросы