Regex Emacs正则表达式替换
在我的latex文件中,我定义了Regex Emacs正则表达式替换,regex,emacs,replace,Regex,Emacs,Replace,在我的latex文件中,我定义了 \newcommand{\replace}[2]{\textcolor{red}{\sout{#1} }\textcolor{blue}{{#2}}} 只是为了强调变化。所以在我的论文草稿中,有很多 \replace{old text}{new text} 现在论文被接受了,我想得到一个干净的版本。如何使用emacs Regex replacement将它们全部更改为 new text 一种非常简单的方法是修改replace命令,使其仅打印新文本: \ne
\newcommand{\replace}[2]{\textcolor{red}{\sout{#1} }\textcolor{blue}{{#2}}}
只是为了强调变化。所以在我的论文草稿中,有很多
\replace{old text}{new text}
现在论文被接受了,我想得到一个干净的版本。如何使用emacs Regex replacement将它们全部更改为
new text
一种非常简单的方法是修改replace命令,使其仅打印新文本:
\newcommand{\replace}[2]{#2}
否则,我将使用键盘宏执行此操作,如以下所示:
C-s;;我向前搜索
\ ;; 自插入命令
替换{;;自插入命令*8
换行符
向后字符
前向性
C-SPC;;设置标记命令
C-r;;我向后搜索
\;自插入命令
替换;;自插入命令*7
换行符
C-w;;杀伤区
2*C-SPC;;设置标记命令
前向性
DEL;;删除向后字符
C-u C-SPC;;设置标记命令
C-d;;删除字符
这个键盘宏背后的逻辑是搜索\replace{
命令,然后使用向前sexp
和向后sexp
在平衡的`花括号'对之间移动
Edit:请注意,
forward sexp
的绑定传统上写为C-M-,但这样的按键可能会被您的窗口管理器截获(至少对于Linux框来说是一种非常常见的行为)。因此,通常更容易键入ESCC-。我会使用命令query replace regexp
(M-x query用以下模式替换regexp
或C-M-%
):
\\replace{.+?}{\(.+?\)}
和以下替换字符串:
\1
请注意大括号内的问号,这使搜索变得懒惰(非贪婪),这意味着它匹配的字符尽可能少。我认为这样的解决方案在参数中出现}{的情况下不起作用。例如:
\replace{$\frac{1}{2}${$\frac{1}{3}}
谢谢Erik的建议。Francesco提出的问题是有效的。我确实遇到过这样的问题。