Mi primera incursión en el mundo peculiar de Emacs Lisp es una función que toma dos cadenas y los permuta entre nosostros:interactivo Emacs Lisp función para intercambiar dos palabras entre sí
(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)))))
Esto funciona - pero me m atascado en lo siguiente:
- cómo solicitar confirmación al usuario antes de cada reemplazo? (No puedo hacer que
perform-replace
funcione) - cómo escapar de las cadenas
a
yb
para que no se interpreten como expresiones regulares si contienen algún tipo de caracteres regex?
Editar: El código de copia-pastable última He estado usando desde hace algún tiempo es:
(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))))
)))
Por desgracia, no se resaltan los próximos partidos de la página como lo hace en la búsqueda.