在emacs操作后选择保留区域

Joh*_*son 5 emacs elisp

我的问题是基于Trey JacksonSyntaxT3rr0r这个问题的回答.

Trey提出了以下函数,用于递增Emacs缓冲区的选定区域中的每个两位数字.

(defun add-1-to-2-digits (b e)
  "add 1 to every 2 digit number in the region"
  (interactive "r")
  (goto-char b)
  (while (re-search-forward "\\b[0-9][0-9]\\b" e t)
    (replace-match (number-to-string (+ 1 (string-to-int (match-string 0)))))))
Run Code Online (Sandbox Code Playgroud)

我想将此功能用于我自己的目的.但是,我想连续多次增加数字.该函数的当前形式的问题是,在每次调用之前,我必须用鼠标再次选择该区域.

我的问题是:如何修改Trey的功能,使其在调用后离开选定的区域?(我的最终目的是将此功能分配给键盘快捷键(类似ctrl+ ),这样,如果我按住ctrl按键,我所选区域中的所有两位数字都会不断增加.)

顺便说一句,我知道Brian Campbell这个答案,建议使用exchange-point-and-mark重新选择之前选择的区域.但是,我试过了,在这种情况下似乎没有帮助.

Tac*_*der 5

这是你的函数被修改为使用let (deactivate-mark)包装内部,save-excursion如答案用户event_jr中建议链接到:

/sf/answers/775646721/

(defun add-1-to-2-digits (b e)
  "add 1 to every 2 digit number in the region"
  (interactive "r")
  (save-excursion
    (let (deactivate-mark) 
      (goto-char b)
      (while (re-search-forward "\\b[0-9][0-9]\\b" e t)
        (replace-match (number-to-string (+ 1 (string-to-int (match-string 0)))))))))
Run Code Online (Sandbox Code Playgroud)