Мой первый набег в причудливый мир emacs lisp - это функция, которая берет две строки и заменяет их друг другом:
(defun swap-strings (a b)
"Replace all occurances of a with b and vice versa"
(interactive "*sFirst Swap Word: \nsSecond Swap Word: ")
(save-excursion
(while (re-search-forward (concat a "\\|" b) nil t)
(if (equal (match-string 0) a)
(replace-match b)
(replace-match a)))))
Это работает - но я застрял на следующем:
- как запрашивать подтверждение у пользователя перед каждой заменой? (Я не могу заставить
perform-replace
работать)
- как экранировать строки
a
и b
, чтобы они не интерпретировались как регулярные выражения, если они содержат какие-либо символы регулярного выражения?
Редактировать: последний код для вставки, который я использовал в течение некоторого времени:
(defun swap-words (a b)
"Replace all occurances of a with b and vice versa"
(interactive "*sFirst Swap Word: \nsSecond Swap Word: ")
(save-excursion
(while (re-search-forward (concat (regexp-quote a) "\\|" (regexp-quote b)))
(if (y-or-n-p "Swap?")
(if (equal (match-string 0) a)
(replace-match (regexp-quote b))
(replace-match (regexp-quote a))))
)))
К сожалению, он не выделяет предстоящие совпадения на странице, как это делает I-search.