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