我在 Windows 上使用 gVim。我有一个包含如下内容(提取)的 XML 文件:
<ExtendedAttributes />
</Activity>
<Activity Id="ded54c70-1ef4-4aeb-852e-3740882c36ff" Name="Activity 1">
<Performers>
<Performer>2212646c-2674-4329-9ddc-1f8376e952e1</Performer>
</Performers>
</Activity>
<Activity Id="cf70ec72-4d49-434a-abf3-aa3e8dc000b5" Name="Activity 2">
<Description>This is a dummy description</Description>
<Implementation>
<Task />
我想在每个活动的名称之前添加一个ID,即
<Activity Id="ded54c70-1ef4-4aeb-852e-3740882c36ff" Name="Activity 1">
会变成
<Activity Id="ded54c70-1ef4-4aeb-852e-3740882c36ff" Name="10 Activity 1">
和
<Activity Id="cf70ec72-4d49-434a-abf3-aa3e8dc000b5" Name="Activity 2">
会变成
<Activity Id="cf70ec72-4d49-434a-abf3-aa3e8dc000b5" Name="20 Activity 2">
等等。我尝试\(<Activity Id="[0-9a-f-]*" Name="\)\@<=[A-Za-z ,]\+
了可以获取“名称”属性的值。但是当我尝试使用http://vim.wikia.com/wiki/Making_a_list_of_numbers:let i=0 | g/.... | let i=i+1
中提到的命令时,我永远无法让它工作。我所能做的就是用序列号替换名称(而我想要 [serial number] [name] 代替)
任何人都可以解释一下吗?
非常感谢。
奥利弗
[编辑]
我尝试了以下方法:
:let @a=1 | %s/\(<Activity Id="[0-9a-f-]*" Name="\)\@<=\([A-Za-z() ,&?;/]\+\)/\=(@a+setreg('a',@a+1))/g
但它只用数字替换了名称,
:let @a=1 | %s/\(<Activity Id="[0-9a-f-]*" Name="\)\@<=\([A-Za-z() ,&?;/]\+\)/\=(@a+setreg('a',@a+1)).\2/g
但我得到“无效的表达”,
:let @a=1 | %s/\(<Activity Id="[0-9a-f-]*" Name="\)\@<=\([A-Za-z() ,&?;/]\+\)/\=(@a+setreg('a',@a+1)).' '.\2/g
但我得到“无效的表达”,
:let @a=1 | %s/\(<Activity Id="[0-9a-f-]*" Name="\)\@<=\([A-Za-z() ,&?;/]\+\)/\=join((@a+setreg('a',@a+1)),' ',\2)/g
但我得到“join() 的参数无效”,
:let @a=1 | %s/\(<Activity Id="[0-9a-f-]*" Name="\)\@<=\([A-Za-z() ,&?;/]\+\)/\=(@a+setreg('a',@a+1))+\2/g
但我得到“无效的表达”。