Как было отмечено, курсор (или «точка») не возвращается в начальную точку после каждой операции замены.Небольшая вспомогательная функция может упростить задачу:
(defun replace-regexp-and-return (from to)
(save-excursion
(while (re-search-forward from nil t)
(replace-match to))))
Затем вы можете написать свою untwist
функцию как:
(defun untwist ()
(interactive)
(replace-regexp-and-return "yield " "")
(replace-regexp-and-return "@defer.inlineCallbacks" "")
(replace-regexp-and-return "defer.returnValue" "return ")
(replace-regexp-and-return "@inlineCallbacks" "")
(replace-regexp-and-return "returnValue" "return ")
(replace-regexp-and-return "^from twisted\.+\n" "")
(replace-regexp-and-return "(session," "(")
(replace-regexp-and-return "session\.log(\(.*\)" "print \1"))
Однако вы, вероятно, захотите сказать "^from twisted\\.+\n"
вместо"^from twisted\.+\n"
, "session\\.log(\\(.*\\)"
вместо "session\.log(\(.*\)"
и "print \\1"
вместо "print \1"
.(Чтобы получить обратную косую черту через механизм регулярных выражений Emacs, вам нужно экранировать их в строке. Так же, как в Java.)