Привет, коллеги. Материал про встроенный файловый менеджер Вим у нас уже был. Обсудим подробнее, как работать с файлами и каталогами.
Причем не только с локальными, но еще и по сети, по протоколам 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:
- краткий (только имена файлов и каталогов)
- полный (имя файла, размер в байтах, время последнего изменения)
- широкий (в несколько столбцов, разделенных не менее, чем двумя пробелами). В этом режиме могут быть проблемы с файлами, в именах которых есть больше одного пробела подряд.
- Дерево (показана древовидная структура подкаталогов с возможностью раскрывать ветви).
Можно задать переменную 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 переключает режимы:
- показывать всё,
- скрывать по шаблону,
- показывать по шаблону.
Можно выставить режим вручную, в переменной 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 он не заменит, но неплохо дополнит, а если коммандера нет, то вообще хорошо. Доступны все файловые операции, в том числе пакетные. Для самой частой операции — просмотреть каталоги и найти нужный файл, чтобы открыть его в Вим — незаменим.