我有一个 tex 文件,其中包含如下几个段落:
\paragraph{name1}
...
\paragraph{name2}
...
现在我想用项目替换所有的“段落”,就像:
\item
...
\item
...
为了达到这个目的,我尝试了很多命令,最后我使用了这个: (请注意,我使用“a:”到“z:”作为段落名称)
**:% s/\\paragraph[{][a-z]:[}]/\\item/g**
而且我认为这既不美观也不高效。我试图匹配包含“段落”的行,但不知何故只有这个词被替换了。现在我可以用
删除所有这些行**:% g/_*paragraph_*/d**
有没有更好的方式以相同的方式执行替换?(或者说替换所有包含特定单词的行)
最佳答案
您的第一次尝试几乎是正确的。而不是这个
:% s/\paragraph[{][a-z]:[}]/\item/g
使用这个
:% s/^\\paragraph{[a-z|0-9]\+}$/\\item/g
让我们一 block 一 block 地分解它:
^
字符匹配行的开头,因此您不会匹配这样的内容:一些文本\paragraph{abc}
我们之所以使用
\\
而不是\
是因为\
是一个转义字符,所以要匹配它,我们转义转义字符。[a-z|0-9]\+
将匹配一个或多个 a-z 或 0-9 字符,我假设您的段落名称由这些字符组成。如果您需要大写字母,您可以执行类似[a-zA-Z|0-9]\+
的操作。最后,我们将表达式锚定到带有
<$
的行的末尾,这样它就不会匹配不完全符合此模式的行。
关于regex - 我如何使用 vim 替换所有匹配正则表达式的整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127993/