我有一个tex文件,其中包含serval段落,如:
\paragraph{name1}
...
\paragraph{name2}
...
现在我要替换所有"段落#34;与项目,就像:
\item
...
\item
...
达到我已经尝试了很多命令,最后我使用了这个: (请注意,我使用" a:"到" z:"作为段落名称)
**:% s/\\paragraph[{][a-z]:[}]/\\item/g**
我认为这是非常有效的。我试图匹配包含"段"但不知何故只有这个词被取代了。现在我可以用
删除所有这些行**:% g/_*paragraph_*/d**
无论如何更好地以相同的方式执行替换?(或者说替换所有行包含特定的单词)
答案 0 :(得分:2)
你的第一次尝试几乎是正确的。而不是这个
:% s/\paragraph[{][a-z]:[}]/\item/g
使用此
:% s/^\\paragraph{[a-z|0-9]\+}$/\\item/g
让我们一点一点地分解:
^
字符与该行的开头匹配,因此您不匹配以下内容:
Some text \paragraph{abc}
我们使用\\
代替\
的原因是因为\
是一个转义字符,所以为了匹配它,我们将转义转义字符。
执行[a-z|0-9]\+
将匹配一个或多个a-z或0-9个字符,这是我假设您的段落名称由。如果您需要大写字母,可以执行[a-zA-Z|0-9]\+
。
最后,我们将表达式锚定到$
行的末尾,这样它就不会与不完全符合此模式的行匹配。
答案 1 :(得分:0)
使用macro
的简单方法!
首先,使用像/
/\paragraph
搜索模式
让我们开始宏。按a
清除注册qaq
。
按qa
开始在注册a
中录制。
按n
即可显示。然后,按c$
删除直到行尾并插入文本。然后,键入文本,然后按escape
键。
按@a
重复此过程。按q
结束宏。
现在,录制了宏,您可以按@a
一次以对所有这些行进行更改。
答案 2 :(得分:0)
你可以这样做:
:%s/\\paragraph{[^{}]*}/\\item/g
这会查找所有出现的\paragraph{
,然后是0个或更多非{}
个字符,然后是}
(例如\paragraph{stuff here}
),并将其替换为\item
。
或者,如果您要替换包含paragraph
的所有行:
:%s/^.*paragraph.*$/\\item/