Ответ 1
Оцените команду ниже в Emacs. После перезагрузки вы можете поместить точку (текстовый курсор) сразу после заключительного пара. Затем сделайте M-x replace-matching-parens
, чтобы заменить закрытие )
на \right)
и соответствующий начальный бит (
на \left(
.
(defun replace-matching-parens ()
(interactive)
(save-excursion
(let ((end-point (point)))
(backward-list)
(let ((start-point (point)))
(goto-char end-point)
(re-search-backward ")" nil t)
(replace-match " \\\\right)" nil nil)
(goto-char start-point)
(re-search-forward "(" nil t)
(replace-match "\\\\left( " nil nil)))))
Бит interactive
указывает, что я хочу "команду", поэтому его можно выполнить с помощью M-x
. Чтобы избежать перевода курсора в странное место после выполнения, я завершаю логику в save-excursion
. Точка возвращается к открытому паре с помощью backward-list
и удерживается в начальном и конечном положениях парно-совпадающей области. Наконец, начиная с конца и работая назад, я заменяю строки. Вместо замены назад, а не вперед я избегаю недействительности end-point
, прежде чем он понадобится.
Обобщение этого для обработки разного рода разделителей не должно быть слишком плохим. backward-list
должен работать с любой парой строк emacs распознается как аналог (
и )
. Чтобы добавить другие пары строк в виде скобок, посмотрите set-syntax-table
в этой статье соответствия скобок.
Используйте global-set-key
, чтобы установить привязку ключа к replace-matching-parens
.
Справедливое предупреждение: replace-matching-parens
- это первая команда elisp, которую я реализовал, поэтому она не может согласовываться с лучшими практиками. Для всех гуру, я открыт для конструктивной критики.