我如何使用 vim 替换所有匹配正则表达式的整行
How can I use vim to substitute all whole lines that match a Regex
我有一个 tex 文件,其中包含如下几个段落:
\paragraph{name1}
...
\paragraph{name2}
...
现在我想用项目替换所有 "paragraph",就像:
\item
...
\item
...
为了达到这个目的,我尝试了很多命令,最后我使用了这个:
(请注意,我使用 "a:" 到 "z:" 作为段落名称)
**:% s/\paragraph[{][a-z]:[}]/\item/g**
而且我认为这既不美观也不高效。我试图匹配包含 "paragraph" 的行,但不知何故只有这个词被替换了。现在我可以使用
删除所有这些行
**:% g/_*paragraph_*/d**
有没有更好的方式以相同的方式进行替换?(或者说替换所有包含特定单词的行)
您的第一次尝试几乎是正确的。而不是这个
:% 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]\+
.
最后,我们将表达式锚定到 $
行的末尾,这样它就不会匹配不完全符合此模式的行。
使用 macro
的简单方法!
首先,使用 /
搜索模式,例如 /\paragraph
让我们启动宏。按 qaq
清除寄存器 a
。
按 qa
开始在寄存器 a
中记录。
按 n
去它的发生。然后,按 c$
删除直到行尾并插入文本。然后,键入文本,然后按 escape
键。
按@a
重复该过程。按 q
结束宏。
现在,宏被记录下来,您可以按一次@a
来更改所有这些行。
你可以这样做:
:%s/\paragraph{[^{}]*}/\item/g
这会找到所有出现的 \paragraph{
,后跟 0 个或多个非 {}
字符,再后跟 }
(即类似 \paragraph{stuff here}
的字符),并替换他们 \item
.
或者如果你想替换所有包含 paragraph
的行:
:%s/^.*paragraph.*$/\item/
我有一个 tex 文件,其中包含如下几个段落:
\paragraph{name1}
...
\paragraph{name2}
...
现在我想用项目替换所有 "paragraph",就像:
\item
...
\item
...
为了达到这个目的,我尝试了很多命令,最后我使用了这个: (请注意,我使用 "a:" 到 "z:" 作为段落名称)
**:% s/\paragraph[{][a-z]:[}]/\item/g**
而且我认为这既不美观也不高效。我试图匹配包含 "paragraph" 的行,但不知何故只有这个词被替换了。现在我可以使用
删除所有这些行**:% g/_*paragraph_*/d**
有没有更好的方式以相同的方式进行替换?(或者说替换所有包含特定单词的行)
您的第一次尝试几乎是正确的。而不是这个
:% 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]\+
.最后,我们将表达式锚定到
$
行的末尾,这样它就不会匹配不完全符合此模式的行。
使用 macro
的简单方法!
首先,使用 /
搜索模式,例如 /\paragraph
让我们启动宏。按 qaq
清除寄存器 a
。
按 qa
开始在寄存器 a
中记录。
按 n
去它的发生。然后,按 c$
删除直到行尾并插入文本。然后,键入文本,然后按 escape
键。
按@a
重复该过程。按 q
结束宏。
现在,宏被记录下来,您可以按一次@a
来更改所有这些行。
你可以这样做:
:%s/\paragraph{[^{}]*}/\item/g
这会找到所有出现的 \paragraph{
,后跟 0 个或多个非 {}
字符,再后跟 }
(即类似 \paragraph{stuff here}
的字符),并替换他们 \item
.
或者如果你想替换所有包含 paragraph
的行:
:%s/^.*paragraph.*$/\item/