我的问题是基于Trey Jackson对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)))))))
Run Code Online (Sandbox Code Playgroud)
我想将此功能用于我自己的目的.但是,我想连续多次增加数字.该函数的当前形式的问题是,在每次调用之前,我必须用鼠标再次选择该区域.
我的问题是:如何修改Trey的功能,使其在调用后离开选定的区域?(我的最终目的是将此功能分配给键盘快捷键(类似ctrl+ ↑),这样,如果我按住ctrl和↑按键,我所选区域中的所有两位数字都会不断增加.)
顺便说一句,我知道Brian Campbell的这个答案,建议使用exchange-point-and-mark重新选择之前选择的区域.但是,我试过了,在这种情况下似乎没有帮助.
这是你的函数被修改为使用let (deactivate-mark)包装内部,save-excursion如答案用户event_jr中建议链接到:
(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)
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |