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