Найти тему
Блокнот математика

Рубрика "Секреты Вим". Работа с файлами

Привет, коллеги. Материал про встроенный файловый менеджер Вим у нас уже был. Обсудим подробнее, как работать с файлами и каталогами.

Причем не только с локальными, но еще и по сети, по протоколам SSH и FTP (только в этом случае открываемый каталог должен оканчиваться на слеш /). Многое одинаково, но в случае расхождений мы здесь обсуждаем просмотр локальных каталогов.

Достаточно открыть каталог вместо файла:

  • из командной строки: vim ~/this/folder/
  • из Вим, в новой вкладке: :tabnew ~/this/folder/
  • из Вим, в этом же окне: :e ~/this/folder/
  • из Вим, в новом окне: :split ~/this/folder/
    Как вариант, vsplit.

Есть и еще варианты.

Открыв каталог, вы увидите его содержимое. Сверху будет "шапка", ниже файлы в каталоге.

Можно перемещаться стрелками, нажатие клавиши ввода или щелчок мышкой открывает файл в Вим. А команда X попытается запустить файл в системе, запросив параметры командной строки. Команда x попробует открыть файл подходящей программой или запустить на исполнение (что, по сути, тоже является передачей файла подходящей программе — bash или другой оболочке).

Работает поиск, как обычно. Но то, что вы видите — конечно, read only. Доступны все команды ex (командной строки), не изменяющие файл. Например, замена с модификатором n, позволяющая сосчитать вхождения. Или можно сохранить список файлов в файл.

Примеры:

:%s/\.zip//gn
:w file.list

Можно открыть файл в Вим, не завершая просмотр каталога. В новом окне, используя o и v (разница в расположении нового окна, горизонтально или вертикально), или в новой вкладе (t). Команда P откроет файл в том окне, которое для этой цели уже использовалось.

p — просмотр содержимого файла. Окно будет разделено и в узком новом окне можно ознакомиться с содержимым. Разница с o и v в том, что окно меньше (можно настраивать), так как это не для работы с файлом, а для ознакомления.

Есть четыре режима просмотра, переключаемые командой i:

  1. краткий (только имена файлов и каталогов)
  2. полный (имя файла, размер в байтах, время последнего изменения)
  3. широкий (в несколько столбцов, разделенных не менее, чем двумя пробелами). В этом режиме могут быть проблемы с файлами, в именах которых есть больше одного пробела подряд.
  4. Дерево (показана древовидная структура подкаталогов с возможностью раскрывать ветви).

Можно задать переменную g:netrw_liststyle, определив предпочтительный формат: соответственно, 0, 1, 2 или 3.

Еще можно изменить формат вывода даты и времени (см. g:netrw_timefmt) и задать максимальную длину имени файла (по умолчанию 32, переменная g:netrw_maxfilenamelen).

Среди прочих, будет каталог .. и, как мы все хорошо знаем, это выход на уровень выше. Но можно подняться туда и проще, нажав минус (-).

Вверху показан заголовок, в котором вы найдете имя текущего каталога, способ сортировки, шаблон скрытых файлов, небольшую подсказку и все такое. Можно убрать или вернуть этот заголовок, нажав I. Еще можно задать (let) переменную g_netrw_banner: если она равна нулю, то заголовок не показывается, а если 1, то показывается. Это для тех, кто знает, чего хочет.

Если курсор на файле, то команда qf сообщит немного информации о файле. Вроде такой строки внизу:

4 -rwxrwxr-x 1 user user 1106 авг 25 11:56 /home/roulette.pl

Нажмите ENTER или введите команду для продолжения

Есть возможность скрывать часть файлов. Для этого предусмотрена переменная g:netrw_list_hide, в которой через запятую заданы регулярные выражения.

Переменную можно задавать не через let, а с помощью <C-H>. Команда a переключает режимы:

  1. показывать всё,
  2. скрывать по шаблону,
  3. показывать по шаблону.

Можно выставить режим вручную, в переменной g:netrw_hide (0,1,2). Есть сокращение gh, скрывающее только файлы, начинающиеся с точки.

Список файлов может быть отсортирован, причем по разным признакам: по имени, по размеру, по дате и т.п. Меняет критерий команда s, которая задает переменную g:netrw_sort_by. Команда перебирает способы по кругу (имя, время, размер, расширение), переменная содержит одно из: name, time, size, exten.

Можно поменять порядок на обратный командой r (переменная g:netrw_sort_direction, значения normal или reverse).

Еще есть переменная g:netrw_sort_options, которая передается команде sort. Так, можно сортировать файлы без учета регистра (i) или по числу в имени (n).

Можно даже задать набор регулярных выражений для измения порядка при сортировке по имени. Например, вспомогательные файлы задвинуть в конец, даже если они по алфавиту должны идти вначале. См. netrw-sortsequence.

Обновить список позволяет <C-L>. Полезно, если каталог изменился извне.

Файловые операции

Вы можете осуществлять основные файловые операции:

удалить файл или каталог (<DEL>)

создать каталог (d)

R — переименовать или переместить файл или каталог

с — сделать данный каталог текущим

Остальные файловые операции связаны с понятием отметки. Файлы можно помечать и потом с помеченными осуществить те или иные действия.

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

Индивидуальный файл под курсором помечается командой mf.

Можно пометить сразу несколько по шаблону: команда mr. Будет предложено вести выражение в стиле shell, с символами *, **, ?, классами [abc].

Есть и еще способы помечать файлы: по спискам QuickFix, по списку открытых файлов и т.п.

Что с помечанными файлами можно делать? Многое:

  • снять метки: mF или mu (вторая удаляет все отметки, первая — только в данном каталоге). Можно снимать метки и индивидуально, mf.
  • Можно их скрыть командой a,
  • удалить командой D,
  • скопировать или переместить командами mc и mm. Для этого надо сначала задать цель командой mt: она задает просматриваемый каталог как цель.
  • сравнить файлы посредством vimdiff: md
  • открыть файлы (списком, а не во вкладках): me
  • поискать в файлах текст по выражению (которое будет запрошено) посредством vimgrep: mg
  • применить произвольную команду Вим или оболочки к файлам: mV или mx или mX. Разница между двумя х-командами в том, что mx запускает команду на каждом файле, а mXодин раз со списком файлов.
  • Заархивировать файлы: mz. Эта же команда распакует запакованное.
  • Команда mr делает хитрое действие: отцепляет расширение от имен помеченных файлов и добавляет/убирает его в/из список/ка скрываемых файлов. Предполагается, что все образцы расширений по одному (четное число равносильно нулю). Так, выбор одного файла .jpeg и одного .jpg приводит к тому, что все картинки в формате JPEG будут скрыты или, напротив, показаны будут только они.
  • Переименовать файлы: R

Помимо отмечания файлов, можно класть закладки. Это делает команда mb, которая кладет закладку в просматриваемый каталог, а если есть отмеченные файлы в каталоге — то и их тоже. Переход на предыдущую закладку (можно с повторителем): gb. Команда qb покажет закладки и историю похождений. Удалить закладки позволяет mB (с повторителем). Закладки сохраняются в особом файле и восстанавливаются при новом запуске Вим.

Можно просто перейти в предыдущий каталог или вернуться в тот, из которого перешли: взад-вперед по истории переходов. Это команды u и U.

Это реально очень удобно, потому что бывает так: вышел из каталога, а их там сто! И откуда пришел — уже не вспомнить.

Можно создать новый файл в данном каталоге: команда %. Вим запросит имя файла и откроет его.

Все команды дублируются командами командной строки (с двоеточием).

Резюмируя: файловый менеджер при условии освоения довольно удобен для статистической работы с файлами в каталоге: сосчитать, найти, просмотреть, перейти к редактированию. Коммандер вроде mc он не заменит, но неплохо дополнит, а если коммандера нет, то вообще хорошо. Доступны все файловые операции, в том числе пакетные. Для самой частой операции — просмотреть каталоги и найти нужный файл, чтобы открыть его в Вим — незаменим.

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022