在我的乳胶文件中,我定义了
\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-<right>,但这样的按键可能会被您的窗口管理器拦截(至少对于 Linux 机器来说这是一种非常常见的行为)。因此,通常更容易键入ESCC-<right>。
我将使用具有以下模式的命令query-replace-regexp
(M-x query-replace-regexp
或):C-M-%
\\replace{.+?}{\(.+?\)}
和以下替换字符串:
\1
请注意花括号中的问号,它使搜索变得懒惰(非贪婪),这意味着它匹配尽可能少的字符。