Pull to refresh

Emacs как файл менеджер

Reading time3 min
Views7.6K
Практически каждому пользователю компьютера рано или поздно приходится сталкиваться с проблемой переименования сразу нескольких файлов. Например, сменить расширение файла, поменять имя, вставить порядковый номер и так далее. Кто-то пишет shell скрипты, кто-то использует специально созданные для этой цели программы, но настоящие индейцы используют Emacs.

В Emacs существует такой режим как dired. Это режим просмотра директории. Чтобы включить его достаточно набрать

Alt-x dired

после этого достаточно выбрать путь к директории
image

Допустим, нам нужно переименовать файлы в этой директории, превратив имя yuka в имя и фамилию yuka.kemmochi. Будем использовать для этого регулярные выражения[1]. Почему регулярные выражения? Потому что это пожалуй самый гибкий способ. И хотя в данном случае мы стреляем из лазерной пушки с автоматической наводкой по воробьям, техника опробованная здесь пригодится в более сложных случаях.

Регулярные Выражения в Emacs

Регулярные выражения не так уж просты сами по себе. В Emacs дело осложняется тем, что он использует POSIX регулярные выражения, и спецсимволы необходимо экранировать слэшем. Так как слэш сам по себе спецсимвол, то его также необходимо экранировать. Плюс ко всему в строках каждый слэш необходимо удваивать. Все это приводит к тому, что регулярное выражение в Emacs может выглядеть, например, вот так
\\<\\(HKCU\\|HKLM\\|dirifempty\\|files\\|filesandordirs\\)\\>

Что соответствует обычному
^(HKCU|HKLM|dirifempty|files|filesandordirs)$

С другой стороны регулярные выражения в Emacs очень легко составлять и тестировать. Для этого мы задействуем пожалуй один из самых мощных инструментов Emacs RE-builder:
image

В открывшемся поле можно вводить выражение, помня о том, что вводится оно как строка, поэтому все слэши необходимо удваивать.
image

Ввод этот интерактивен, то есть Emacs подкрасит то, что соответствует введенному выражению. Более того, отдельные группы выделяются отдельным цветом.

Составив выражение мы готовы переименовывать файлы.

Операции с файлами


Перед тем как оперировать с файлами, нам необходимо их выделить. Можно просто перемещаясь по буферу и вставая на имя файла нажимать m, можно ввести % g и затем в приглашении ввести часть имени файлов, можно использовать опять же регулярные выражения ввеля % m
image

Выделить все файлы достаточно просто
image

Вуаля
image

Дальнейшие операции проходят над выделенными файлами.

Чтобы переименовать файлы используя регулярные выражения нажмем % R.
image

Регистр буквы важен, то есть нажимается Shift и 5 и затем не отпуская Shift нажимаем r. Как правило, 5 и r находятся рядом на клавиатуре поэтому переименование файлов используя регулярные выражения можно запустить довольно быстро и просто.

Вводим наше регулярное выражение, помня о том, что количество слешей должно «уполовинится» по сравнению с тем что мы пробовали в RE-builder.


Дополнительная фишка заключается в том, что Emacs запоминает то, что вы вводили в приглашения до этого и достаточно просто перемещаться по истории ввода используя Alt-p — назад и Alt-n — вперед. Выбрав нужную строку из истории можно ее отредактировать и использовать вновь.


После этого предлагается ввести выражения для нового имени файла
image

Alt-p/Alt-n работают и здесь.

image

Мы используем, так называемые, замены (Regular Expression Replacements). Наиболее интересны следующие:
  • \1...\9 — группы, то есть то что в исходном выражении ограничено скобками \( и \) в порядке следования слева — внутрь — направо
  • \& — то что пришлось на все регулярное выражение (то есть группа 0)
  • \? — приглашение пользователя к вводу. При каждом переименовании Emacs будет спрашивать, что ему вставить вместо \?

При первом переименовании Emacs спросит
image

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

Можно нажимать y/n, соглашаясь или отказываясь переименовывать файл. Emacs перейдет к следующему. Можно нажать ! (то есть Shift 1
), заставив Emacs пробежаться по всем отмеченным файлам, либо можно закончить всю операцию по переименованию нажав q.
image

Легко и просто файлы переименованы.

Дополнительная Литература





[1] Еще можно использовать так называемый wdired-change-to-wdired-mode, но это уже другая история.
Tags:
Hubs:
Total votes 16: ↑13 and ↓3+10
Comments8

Articles