Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search emacs:在区域上搜索和替换_Search_Emacs_Region - Fatal编程技术网

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
需要在替换将更改区域长度时更新