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! 来执行一个没有应用映射的普通命令,然后简单地 Ins 在行的开头插入两个空格。

(我从 复制并编辑了模式)

:global ~</\?[Ww]ord~ normal! I  

注意I.

后的两个尾随空格

这里我使用 ~ 作为模式分隔符,因为任何字符都可以,而不使用标准的 / 意味着我不需要在模式中转义它。

我们仍然必须转义 ? 以获得它的“零或一”的特殊含义(与匹配文字 ? 相反)。