Введение
Здравствуй, сообщество!
Многие мои знакомые считают некрофилией использование Emacs,
а некоторые и вовсе о нем не слышали (сказывается возраст, полагаю).
Перед вами статья формата "для личного блога", в которой я очень кратко
(upd. текста все равно очень много получилось) опишу,
почему я уже полгода (на самом деле больше, но постоянно использую только около полугода) использую
Emacs в качестве основного текстового редактора.
Предыстория
Впервые об Emacs я узнал, наверное, из автобиографии Линуса Торвальдса — "Just for fun: The Story of an Accidential Revolutionary".
В ней была шутка вроде: "Emacs — отличная операционная система, жаль,
что в ней нет нормального текстового редактора".
Спустя пару лет, когда я сам начал использование редактора,
я часто рассказываю знакомым эту шутку, ведь в каждой шутке только доля шутки.
Действительно, если бы меня спросили, как я представляю себе Emacs,
я бы ответил: "Это интерпретатор Лиспа, который неразрывно и очень тесно связан с текстовым редактором".
Но об этом чуть позже.
Мое первое знакомство с Emacs прошло неудачно. Да, у него достаточно большой порог вхождения,
а я был слишком ленив, чтобы перелезть через этот забор. Собственно, дальше установки и просмотра пары роликов дело не зашло.
По итогу сей редактор использовался мною исключительно для набора LaTeX-документов (во время учебы в вузе) и то потому,
что он автоматически подхватывал эти документы. Никаких настроек, я пользовался им просто как блокнотом.
Следующий переход был удачным и, полагаю, последним. Устроившись Ruby-джуниором я решил попробовать еще раз.
Мой начальник использовал (и, наверное, использует) Emacs, поэтому он меня очень поддержал в этом деле.
Даже выделил мне рабочее время на то, чтобы я занимался настройкой текстового редактора (прекрасный руководитель, на самом деле).
Собственно, с тех пор окно Emacs’а не закрывается в моем маке никогда.
Какие я вижу преимущества
Абсолютная настраиваемость
В Emacs можно настроить что угодно. Лично у меня часто болят запястья (туннельный синдром, наверное), поэтому я
стараюсь как можно меньше трогать стрелочки и вообще двигать руками (посмотрите, как движется ваша кисть
при переходе из позиции печати на стрелки). На самом деле эту проблему я решил с помощью клавиатуры Ducky mini,
но меня не совсем устраивает, где находятся arrow-keys (они находятся на okl;
, а я хочу на ijkl
или на wasd
на худой конец).
Собственно, Emacs позволил мне настроить все сочетания клавиш. Теперь я двигаюсь по тексту с помощью Alt + i/j/k/l.
Настройка, кстати, никогда не останавливается. Периодически находятся какие-то улучшения/недочеты,
так что я добавил открытие конфига на Alt+9.
Автоматизация
Как я уже упоминал, я отношусь к этому текстовому редактору,
как к интерпретатору лиспа со встроенным (или прикрепленным) текстовым редактором.
Т.к. большинство (полагаю) читателей Хабрахабра так или иначе знакомы с программированием,
вопрос к вам: что для вас является красотой программирования?
Мой ответ на этот вопрос: автоматизация рутинной работы. В одной из компаний,
в которых я работал, мне давали задачу на то, чтобы разобрать логи сервера и выдернуть оттуда какую-то инфу.
Пока я выбирал, на чем буду решать задачу, ко мне подошел сисадмин и сказал: "Я тебе скинул логи и заодно скрипт,
который выдернет инфу.". Скриптом оказалась одна строчка для баша. Это было прекрасно. В тот момент я открыл для себя Unix-way.
Это было лирическое отступление.
Так вот, т.к. Emacs — это интерпретатор Лиспа с одной стороны, то он позволяет *барабанная дробь* программировать.
Думаю, вы попадали в ситуацию, когда нужно было произвести с текстом какие-то манипуляции,
под которые было не очень разумно писать какие-то внешние скрипты,
и, т.к. это было неразумно, вы все делали руками, тихо матерясь.
Пример № 1
Мы переписывали шаблоны с ERB на Slim. Нужно было помимо всего прочего поменять двойные ковычки, на одинарные.
Т.к. файлов много, ситуации разные (не все ковычки нужно было поменять), писать внешнюю программу не имело смысла.
Но ведь я работал с Emacs! В интернете можно было найти множество функций для проведения операции замены пары ковычек,
но время было, поэтому решил написать свою простенькую версию:
(defun toggle-quotes () (interactive) (let ((saved-position (point)) (founded-quote nil) (converted-quote nil)) (search-backward-regexp "['\"]") (setq founded-quote (string (char-after (point)))) (setq converted-quote (get-toggled-quote founded-quote)) (delete-char 1) (insert converted-quote) (search-forward founded-quote) (delete-char -1) (insert converted-quote) (goto-char saved-position))) (defun get-toggled-quote (ch) (if (equal ch "'") "\"" "'"))
Не закидывайте меня тапками по поводу алгоритма или качества кода, пожалуйста,
я и сам знаю, что выглядит это не очень привлекательно.
Суть в том, что оно работает. Если мне нужно поменять пару ковычек,
я ставлю курсор в любое место между ними и нажимаю C-'
(ctr + ‘).
Пример №4
Что на текущей, что на прошлой работе мы используется Redmine и Git.
Причем для фич в гите каждому коммиту дописывается постфикс с номером задачи в Redmine.
Каждый раз, когда отписываешься по задаче, стараешься описывать что ты сделал и давать ссылки на коммиты (gitlab, bitbucket).
Есть 10 коммитов. 10 раз делаем "копировать-вставить". Эх….
Код:
(defun close-message(prefix issue) (interactive "sPrefix: \nnIssue:") (insert (let ((default-directory (file-name-directory (buffer-file-name (other-buffer))))) (shell-command-to-string (format "git log --pretty=oneline | grep '\#%d$' | tail -r | awk '{ print \"%s\" $0 }'" issue prefix)))))
Немного недоработанная функция, которая использует соседний буфер для определения рабочей директории.
Собственно, пишу префикс типа "https://bitbucket.org/project/commits/" и на выходе получаю список ссылок на коммиты с кратким гит-описанием.
В данный момент использую в связке со своей утилитой redmine_cli
. Очень удобно.
Пример №3
Был json с кое-какими данными. Нужно было изменить структуру его структуру:
превратить из объекта в массив, некоторые данные удалить и т.д. и т.п.
Мой начальник (все тот же), решил показать мне мастер-класс (т.к. сам я не смог сходу придумать,
как решить задачу средствами редактора) и в течение 5-10 минут у него был готов макрос (!!),
который для каждой записи делал нужную работу.
Собственно, он просто зажал кнопочку запуска макроса и через пару секунд предоставил мне результат.
Пример №4
Нужно было добавить в класс несколько однотипных методов (абстрагивать еще сильнее смысла не было).
Написал временный сниппет (показать не могу, т.к. он был временный и не сохранялся никуда),
который сократил количество набираемого текста раза в 4.
Кстати, сниппеты есть во многих текстовых редакторах, но почему-то я почти ни разу не видел,
чтобы ими пользовались. А стоило бы.
Зрелость
Старичку Emacs’у уже много лет и вокруг него выросло огромное сообщество.
Если меня интересует какой-либо вопрос, связанный с Linux,
и запрос "linux <вопрос>" не дал нужного результата, я добавляю туда слово "ubuntu" или "debian".
Дело в том, что эти дистрибутивы обладают наибольшей популярностью и огромным сообществом,
поэтому там можно найти ответ почти на любой вопрос, как мне кажется.
С Emacs ситуация точно такая же. Огромное сообщество, множество вопросов, множество ответов,
огромное количество плагинов почти под любую задачу (даже игры есть!).
Вместо заключения
Вот, наверное, и все.
Summary:
- Emacs позволяет манипулировать с текстом как угодно и так, как вам нравится.
- Вы можете настраивать его под свои нужды бесконечно, делая все более совершенным и удобным.
- Вы по-настоящему свободны.
А кто не любит свободу?
ссылка на оригинал статьи https://habrahabr.ru/post/280946/
Добавить комментарий