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 еще не стал сильным пользователем.
Аналогичный вопрос здесь: http://stackoverflow.com/questions/2582555/emacs-without-lisp –