Emacs Lisp - это то, к чему вы обращаетесь, если вы хотите автоматизировать какое-то редактирование в вашем документе, когда прохождение пользовательского интерфейса слишком утомительно или медленно.
Вот пример: мне пришлось провести некоторый рефакторингв моей компании некоторое время назад.Это включало перемещение нескольких методов в кучу файлов.Чтобы помочь людям, которые будут объединять наш код во время перехода, мы оставили «надгробные» комментарии в старом месте, сообщая им, где будет находиться новый код.Надгробия включали в себя закомментирование всей функции (включая объявление), удаление тела функции и помещение вместо нее комментария.
После нескольких из них и десятков, я былготов вырвать мои волосы от скуки.Поэтому я собрал следующие команды вместе и вставил их в мой файл ~/.emacs
.Вы можете быть в состоянии понять суть того, что они делают, даже без особых комментариев.
(defun reheadstone-region (fname beg end)
(interactive "sFilename to use: \nr")
(save-excursion
(save-restriction
(narrow-to-region beg end)
;; comments around entire thing
(goto-char (point-min))
(insert "/*\n")
(goto-char (point-max))
(insert "\n*/\n")
;; zap the method body
(goto-char (point-min))
(search-forward "{")
(forward-line)
(push-mark (point))
(goto-char (point-max))
(search-backward "}")
(beginning-of-line)
(kill-region (region-beginning) (region-end))
(pop-mark)
;; new headstone body
(headstone-in fname))))
(defun headstone-in (fname)
(interactive "sFilename to use: ")
(save-excursion
(beginning-of-line)
(insert (format "\tThis method has been moved to %s." fname))))
Это был быстрый и грязный хак, и он, несомненно, далек от совершенства в своей работе.Но после загрузки и привязки его к клавише, и, немного подправив его, выбрав область вокруг функции, которую я хотел заложить перед выполнением команды, я выполнял целый ряд утомительных правок практически без усилий.Кроме того, я получил удовольствие от мгновенного удовлетворения, которое этот код предоставил мне.Мои коллеги задавались вопросом, почему я выглядела такой веселой, когда весь день возвращалась домой, особенно после того, как выглядела такой раздражительной в обеденный перерыв.
Это то, что Emacs Lisp может сделать для вас.Я полагаю, вы могли бы утверждать, что это ничем не отличается от «разработки самого Emacs», поскольку эти команды практически не отличаются от встроенных команд Emacs с точки зрения пользовательского интерфейса, но психологический эффект сильно отличается.Я расширяю редактор очень специфическими командами, совершенно особыми способами для решения задач для моего проекта, которые были бы трудными или невозможными без полного языка сценариев и API редактора в моем распоряжении.С моей точки зрения (и я пришел к этому мнению в последнее время), пользователь Emacs без каких-либо базовых возможностей с Emacs Lisp еще не стал опытным пользователем.