Vim - 我们 // 替换模式
Vim - Vi // Substitute pattern
我有一个 XML 文件如下:
<Word name="name1" WordID="...">
</Word>
我需要在整个文件中的这两行前面插入 2 个额外的前导空格
有任何想法吗? - 谢谢!
尝试:
%s/^\(<\/*[Ww]ord.*\)$/ /
% 表示整个文件。
s表示替代
^ 表示行首
$表示行尾
< 是尖括号
.* 表示任何字符零次或多次
( 和 ) 括起你要保留的正则表达式
\1 表示保留的正则表达式应插入的位置。
在 /
之后和 </code> 之前,您可以插入任意数量的 space。</p>
<p>当您在 <code>\(
和 \)
之间编写表达式时,它会被记录下来,之后可以与 \N
一起使用,其中 N 是一个数字。
例如这里 </code> 表示匹配的第一个表达式。
如果你有第二次 <code>\(
和 \)
,你可以使用 </code> 和 <code>
分别包含第一个和第二个。
例如,
s/\(first\)\(second\)/ /
将在单词 first 和 second
之间插入一个 space
备选方案:全局命令。
全局命令作用于整个文件,并对匹配模式的每一行执行一个(Ex)动作。这是 grep
(:global/re/print
) 的灵感来源,如果你眯着眼看,它类似于 awk
。
我们在这里的操作是插入两个空格,从语义上讲,substitute
不太好捕捉到我的大脑。
因为我们需要一个 Ex 命令,所以我们使用 :normal!
来执行一个没有应用映射的普通命令,然后简单地 I
ns 在行的开头插入两个空格。
(我从 复制并编辑了模式)
:global ~</\?[Ww]ord~ normal! I
注意I
.
后的两个尾随空格
这里我使用 ~
作为模式分隔符,因为任何字符都可以,而不使用标准的 /
意味着我不需要在模式中转义它。
我们仍然必须转义 ?
以获得它的“零或一”的特殊含义(与匹配文字 ?
相反)。
我有一个 XML 文件如下:
<Word name="name1" WordID="...">
</Word>
我需要在整个文件中的这两行前面插入 2 个额外的前导空格 有任何想法吗? - 谢谢!
尝试:
%s/^\(<\/*[Ww]ord.*\)$/ /
% 表示整个文件。
s表示替代
^ 表示行首
$表示行尾
< 是尖括号
.* 表示任何字符零次或多次
( 和 ) 括起你要保留的正则表达式
\1 表示保留的正则表达式应插入的位置。
在 /
之后和 </code> 之前,您可以插入任意数量的 space。</p>
<p>当您在 <code>\(
和 \)
之间编写表达式时,它会被记录下来,之后可以与 \N
一起使用,其中 N 是一个数字。
例如这里 </code> 表示匹配的第一个表达式。
如果你有第二次 <code>\(
和 \)
,你可以使用 </code> 和 <code>
分别包含第一个和第二个。
例如,
s/\(first\)\(second\)/ /
将在单词 first 和 second
之间插入一个 space备选方案:全局命令。
全局命令作用于整个文件,并对匹配模式的每一行执行一个(Ex)动作。这是 grep
(:global/re/print
) 的灵感来源,如果你眯着眼看,它类似于 awk
。
我们在这里的操作是插入两个空格,从语义上讲,substitute
不太好捕捉到我的大脑。
因为我们需要一个 Ex 命令,所以我们使用 :normal!
来执行一个没有应用映射的普通命令,然后简单地 I
ns 在行的开头插入两个空格。
(我从
:global ~</\?[Ww]ord~ normal! I
注意I
.
这里我使用 ~
作为模式分隔符,因为任何字符都可以,而不使用标准的 /
意味着我不需要在模式中转义它。
我们仍然必须转义 ?
以获得它的“零或一”的特殊含义(与匹配文字 ?
相反)。