Открытие файлов в архивах из vim

Вопрос или проблема

Я знаю, что vim может открывать файлы в архивах zip или tar{,.gz} интерактивно: сначала откройте архив, затем перейдите к нужной записи и нажмите Enter.

lesspipe (https://github.com/wofr06/lesspipe) (который является препроцессором для less) предоставляет дополнительное удобство, позволяя напрямую вводить как имя архива, так и имя файла внутри архива одновременно (less foo.tgz:file-within-foo) (да, я знаю, что такая схема теоретически приводит к проблемам с файлами, содержащими двоеточия в их именах; на практике это редко встречается…). Мне было интересно, доступна ли аналогичная возможность (возможно, в виде плагина) для vim.

Уточнение: Фактически, то, что я спрашиваю, должно быть “относительно” простым (и в основном сосредоточенным на удобстве использования), потому что большая часть возможностей работы с архивами уже присутствует в vim: я просто ищу плагин, который преобразует, скажем, vim foo.tgz:file-within в vim foo.tgz, за которым следует выбор file-within в списке, предлагаемом vim.

Большинство вариантов Unix поддерживают FUSE, который позволяет программам определять новые типы файловых систем. Существует несколько файловых систем FUSE, которые отображают содержимое архивов как дерево каталогов. Таким образом, любое приложение может видеть содержимое архива как обычные файлы прозрачно (см., например, здесь).

  • Например, с помощью avfs вы получаете доступ только для чтения:
    mountavfs
    cd ~/.avfs$PWD
    vim foo.tgz\#/file-within-foo
    
  • С помощью archivemount вам нужно явно монтировать каждый архив, но вы получаете доступ на чтение и запись.
    mkdir foo.d
    archivemount foo.tgz foo.d
    vim foo.d/file-within-foo
    fusermount -u foo.d; rmdir foo.d
    

Ответ или решение

Открытие файлов в архиве через Vim: Пошаговое руководство

Vim — мощный текстовый редактор, который поддерживает открытие файлов внутри архивов, таких как zip и tar (в том числе tar.gz), интерактивно. Однако многие пользователи ищут способы повысить удобство работы с архивированными файлами, в частности, запуская Vim с указанием как имени архива, так и имени файла внутри него.

Возможности Vim

Vim позволяет открыть архив и затем выбрать файл, Navigating through the archive’s contents. Для этого достаточно:

  1. Запустите Vim с архивом:

    vim foo.tgz
  2. После этого, используя команду :e или :edit, найдите файл, на который нужно перейти, и нажмите Enter для его открытия.

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

Плагины для улучшения функциональности

На данный момент, существует несколько плагинов, способных автоматизировать процесс выбора файла в архиве. Ниже представлены некоторые из них:

  1. vim-archive:
    Этот плагин добавляет удобные команды, которые позволяют быстро открывать и просматривать файлы внутри архивов без необходимости вручную просматривать содержимое.

    Установка плагина осуществляется с помощью менеджера плагинов, например Vundle или vim-plug.

    Plug 'mattn/vim-archive'

    После установки, можно использовать команду :Archive для просмотра содержимого.

  2. fzf.vim:
    Этот плагин позволяет использовать fzf (fuzzy finder) для быстрого поиска файлов, включая файлы в архивах.

    Установка через vim-plug:

    Plug 'junegunn/fzf'
    Plug 'junegunn/fzf.vim'

    Далее, минимальная конфигурация позволит вам использовать fzf для выбора файла из архива так:

    :Files foo.tgz

FUSE: Работа с архивами как с файлами

Если вам нужно более глубокое интегрирование с файловой системой, стоит обратить внимание на FUSE (Filesystem in Userspace). Это позволяет вести работу с архивами так, как если бы они были обычными папками. Два популярных решения — это avfs и archivemount:

  1. avfs:

    • Установка:

      sudo apt install avfs
    • Монтирование архива:

      mountavfs
      cd ~/.avfs$PWD
      vim foo.tgz#/file-within-foo

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

  2. archivemount:

    • Установка:

      sudo apt install archivemount
    • Монтирование:

      mkdir foo.d
      archivemount foo.tgz foo.d
      vim foo.d/file-within-foo
      fusermount -u foo.d; rmdir foo.d

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

Заключение

Хотя Vim может быть использован для открытия файлов в архивах, использование плагинов и возможностей FUSE значительно повышает удобство работы. Плагины, такие как vim-archive и fzf.vim, а также использование FUSE, делают взаимодействие с архивами более интуитивным и эффективным. Выбор подходящего метода зависит от ваших потребностей и предпочтений.

Оцените материал
Добавить комментарий

Капча загружается...