Search emacs:在区域上搜索和替换
所以,我有一个很好的函数(有人为我做的),用于在整个缓冲区上进行多次搜索和替换Search emacs:在区域上搜索和替换,search,emacs,region,Search,Emacs,Region,所以,我有一个很好的函数(有人为我做的),用于在整个缓冲区上进行多次搜索和替换 (defun accent-replace-whole-buffer () "Corrects macrons from badly scanned latin" (interactive "*") (dolist (ele (list ?â ?ä ?ê ?ë ?î ?ô ?ü ?ï)) (setq elt (char-to-string ele)) (goto-char (point-m
(defun accent-replace-whole-buffer ()
"Corrects macrons from badly scanned latin"
(interactive "*")
(dolist (ele (list ?â ?ä ?ê ?ë ?î ?ô ?ü ?ï))
(setq elt (char-to-string ele))
(goto-char (point-min))
(while (search-forward elt nil t 1)
(replace-match
(char-to-string
(pcase ele
(`?â ?ā)
(`?ä ?ā)
(`?ê ?ē)
(`?ë ?ē)
(`?î ?ī)
(`?ô ?ō)
(`?ü ?ū)
(`?ï ?ī)))))))
我想做另一个函数,只在选定的区域上做这个
我该怎么办?任何地方都有不错的教程吗?使用
缩小到区域
,在保存限制内
:
(在区域中取消重音替换(开始-结束)
“从扫描不良的拉丁语中更正活动区域中的长音符”
(交互式“*r”)
(保留限制)
(缩小到区域开始和结束)
(dolist(ele(listāāēēīōūī))
(setq elt(字符到字符串ele))
(转到字符(最小点))
(while(向前搜索elt nil t 1)
(更换火柴
(字符到字符串)
(pcase ele)
(`?â ?ā)
(`?ä ?ā)
(`?ê ?ē)
(`?ë ?ē)
(`?î ?ī)
(`?ô ?ō)
(`?ü ?ū)
(`?ï ?ī))))))))
而不是内置的交互代码“r”,使用该形式:
(defun MYFUNTION (&optional beg end)
(interactive "*")
(let ((beg (cond (beg)
((use-region-p)
(region-beginning))
(t (point-min))))
(end (cond (end (point-marker end))
((use-region-p)
(point-marker (region-end)))
(t (point-marker (point-max))))))
(and beg end (narrow-to-region beg end))
(goto-char beg)
;; here some replace example revealing the problem mentioned
(while (re-search-forward "." end t 1)
(replace-match "+++++++++"))))
基本上有两个原因:确保在操作时区域可见。“r”不适用于瞬态标记模式。不幸的是,use-region-p
也有一些怪癖。第二个原因:end
需要在替换将更改区域长度时更新