在我的乳胶文件中,我定义了
newcommand{replace}[2]{textcolor{red}{sout{#1} }textcolor{blue}{{#2}}}
只是为了突出变化。所以在我的论文草稿中,有很多出现
replace{old text}{new text}
现在论文被接受,我想得到一个干净的版本。如何使用 emacs 正则表达式替换将它们全部更改为
new text
一个非常简单的方法是修改替换命令,使其仅打印新文本:
newcommand{replace}[2]{#2}
否则,我将使用如下所示的键盘宏执行此操作:
C-s ;; isearch-forward
;; self-insert-command
replace{ ;; self-insert-command * 8
RET ;; newline
<left> ;; backward-char
ESC <C-right> ;; forward-sexp
C-SPC ;; set-mark-command
C-r ;; isearch-backward
;; self-insert-command
replace ;; self-insert-command * 7
RET ;; newline
C-w ;; kill-region
2*C-SPC ;; set-mark-command
ESC <C-right> ;; forward-sexp
DEL ;; delete-backward-char
C-u C-SPC ;; set-mark-command
C-d ;; delete-char
此键盘宏背后的逻辑是搜索replace{
命令,然后使用 forward-sexp
和 backward-sexp
在平衡的"大括号"对之间移动。
编辑:请注意,forward-sexp
的绑定传统上写为 C-M-
我会使用以下模式使用命令query-replace-regexp
(M-x query-replace-regexp
或C-M-%
):
\replace{.+?}{(.+?)}
和以下替换字符串:
1
请注意大括号内的问号,这使搜索变得懒惰(非贪婪),这意味着它匹配的字符尽可能少。