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

    Практически каждому пользователю компьютера рано или поздно приходится сталкиваться с проблемой переименования сразу нескольких файлов. Например, сменить расширение файла, поменять имя, вставить порядковый номер и так далее. Кто-то пишет 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, но это уже другая история.
    • +10
    • 5,4k
    • 8
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 8

      –1
      Да есть хоть что-то, что Emacs не умеет?!
        +2
        официальная версия сообщества — кофе варить не умеет, но сдается мне, только из-за лени сообщества. emacs+arduino = кофе, я думаю.
        +4
          0
          Промазал
          0
          От одного из уважаемых мною UNIX-оидов слышал, что в Emacs есть всё, кроме удобного текстового редактора :)
            +1
            Emacs это хорошая feature rich операционная система, с одним недостатком — для нее так и не написали хорошего текстового редактора. :)
              0
              На самом деле у Emacs два недостатка, причем я так думаю непреодолимых — отсутствие многонитевости (multi-threading) и отсутсвие Foreign Function Interface. Если бы их не было, то «нормальный редактор» можно было бы к Emacs подцепить :)
            0
            Я считаю, вообще Emacs скоро вытеснит GNOME, KDE, Xfce и прочие графические среды. Зачем все эти тяжеловесные навороты, если есть Emacs! :)

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

            Самое читаемое