在emacs操作后选择保留区域

时间:2013-04-14 16:11:24

标签: emacs elisp

我的问题建立在this answer by Trey Jacksonthis question from SyntaxT3rr0r之上。

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)))))))

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

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

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

2 个答案:

答案 0 :(得分:5)

根据链接到的答案用户event_jr的建议,您的函数已修改为使用let (deactivate-mark)封装在save-excursion内部:

https://stackoverflow.com/a/11080667/903943

(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)))))))))

答案 1 :(得分:4)