bước đột phá đầu tiên của tôi khác vào thế giới kỳ quặc của emacs lisp là một chức năng mà phải mất hai chuỗi và giao dịch hoán đổi chúng với eachother:Interactive Emacs Lisp chức năng để trao đổi hai từ với nhau
(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)))))
này hoạt động - nhưng tôi m bị kẹt trên các mục sau:
- cách nhắc người dùng xác nhận trước mỗi lần thay thế? (Tôi không thể nhận được
perform-replace
để hoạt động) - cách thoát khỏi các chuỗi
a
vàb
để chúng không được hiểu là regex nếu chúng chứa bất kỳ ký tự regex nào?
Edit: Các bản sao-thể dán mã cuối cùng tôi đã sử dụng trong một thời gian là:
(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))))
)))
Thật không may, nó không làm nổi bật trận đấu sắp tới trên trang như I-tìm kiếm không.