2

使用 emacs,如何在缓冲区中搜索和替换正则表达式?除了以交互方式评估 elisp 之外,我如何以编程方式执行此操作?例如,用制表符替换一个或多个空格,我需要将' +'(一个或多个空格)与类似C-q-TAB. 这可能吗?

4

3 回答 3

3

我相信答案是M-x replace-regexp

于 2013-07-14T01:56:15.947 回答
3

您可以通过编程方式执行以下操作:

(defun region-replace-multiple-spaces-with-single-space(beg end)
  (interactive "*r")
  (save-restriction
    (narrow-to-region beg end)
    (save-excursion
      (goto-char (point-min))
      (while (search-forward-regexp " +" nil t)
    (replace-match " " nil nil)))))
于 2013-07-14T15:29:19.867 回答
1

我有一个多用途的replace-regexp

  • 如果区域处于活动状态,则替换区域中的正则表达式
  • 使用数字参数,调用query-replace-regexp
  • 否则,替换当前行上的正则表达式(实际上非​​常有用)

这是代码:

(global-set-key (kbd "C-/") 'replace-regexp-dwim)

(defun replace-regexp-dwim (arg)
  (interactive "P")
  (destructuring-bind (from to &rest)
      (query-replace-read-args "Replace regexp" nil)
    (if arg
        (query-replace-regexp from to)
      (let ((st (if (region-active-p)
                    (region-beginning)
                  (line-beginning-position)))
            (en (if (region-active-p)
                    (region-end)
                  (line-end-position))))
        (goto-char st)
        (while (re-search-forward from en t)
          (replace-match to nil t))))))
于 2013-07-18T20:41:35.647 回答