使用 vimgrep - 或其他 vim 可能性 - 我如何从文件中获取数据组?
with vimgrep - or other vim possibility - how can i get groups of data out of a file?
我正在尝试对文件执行 vimgrep,以便从 xml 文件中仅获取两个属性及其值。
到目前为止我可以得到完整的台词,我希望在小组的帮助下有更好的显示。
:vimgrep 键= % |哥本
^ 我想在此命令中添加使用“( )”分组的可能性....但暂时没有成功。
非常感谢您的帮助,以便获得 "result expected"
中解释的结果
我正在处理的部分文件:
<policy name="Menu_Controls" class="User" displayName="$(string.Menu_Controls)" explainText="$(string.IE_ExplainMenu_Controls)" presentation="$(presentation.Menu_Controls)" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls">
<parentCategory ref="AdminApproved" />
<supportedOn ref="SUPPORTED_IE5" />
<elements>
<boolean id="MCSiMenu" valueName="{275E2FE0-7486-11D0-89D6-00A0C90C9B67}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
<boolean id="PopupMenu_Object" valueName="{7823A620-9DD9-11CF-A662-00AA00C066D2}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
<boolean id="Ikonic_Control" valueName="{F5131C24-E56D-11CF-B78A-444553540000}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
</elements>
</policy>
<policy name="Microsoft_Agent" class="User" displayName="$(string.Microsoft_Agent)" explainText="$(string.IE_Explain_Microsoft_Agent)" presentation="$(presentation.Microsoft_Agent)" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls">
<parentCategory ref="AdminApproved" />
<supportedOn ref="SUPPORTED_IE5" />
<elements>
<boolean id="Microsoft_Agent_Control" valueName="{D45FD31B-5C6E-11D1-9EC1-00C04FD7081F}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
</elements>
</policy>
我的预期结果:
name="Menu_Controls" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
name="Microsoft_Agent" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
在此先感谢您的帮助。
东施
我的 ExtractMatches plugin 提供了一个 :YankMatches
命令,您可以用它提取匹配项并将它们放入暂存缓冲区。作为单线:
:execute 'YankMatches \<\%(name\|key\)="[^"]*"' | new | put!
结果:
name="Menu_Controls"
key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
name="Microsoft_Agent"
key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
两个 cmd 可以做到:
v/<policy /d
然后
%s/.* \(name="[^"]*"\).*\(key="[^"]*"\).*/ /g
如果您发现 :vimgrep
和 quickfix 列表确实有用,您可以使用 editqf.vim plugin 使 grep 结果的 quickfix 列表可编辑,然后使用例如@Kent 的回答中给出的 :%s
命令的变体,用于去除无关的东西。
我正在尝试对文件执行 vimgrep,以便从 xml 文件中仅获取两个属性及其值。 到目前为止我可以得到完整的台词,我希望在小组的帮助下有更好的显示。
:vimgrep 键= % |哥本
^ 我想在此命令中添加使用“( )”分组的可能性....但暂时没有成功。
非常感谢您的帮助,以便获得 "result expected"
中解释的结果我正在处理的部分文件:
<policy name="Menu_Controls" class="User" displayName="$(string.Menu_Controls)" explainText="$(string.IE_ExplainMenu_Controls)" presentation="$(presentation.Menu_Controls)" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls">
<parentCategory ref="AdminApproved" />
<supportedOn ref="SUPPORTED_IE5" />
<elements>
<boolean id="MCSiMenu" valueName="{275E2FE0-7486-11D0-89D6-00A0C90C9B67}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
<boolean id="PopupMenu_Object" valueName="{7823A620-9DD9-11CF-A662-00AA00C066D2}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
<boolean id="Ikonic_Control" valueName="{F5131C24-E56D-11CF-B78A-444553540000}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
</elements>
</policy>
<policy name="Microsoft_Agent" class="User" displayName="$(string.Microsoft_Agent)" explainText="$(string.IE_Explain_Microsoft_Agent)" presentation="$(presentation.Microsoft_Agent)" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls">
<parentCategory ref="AdminApproved" />
<supportedOn ref="SUPPORTED_IE5" />
<elements>
<boolean id="Microsoft_Agent_Control" valueName="{D45FD31B-5C6E-11D1-9EC1-00C04FD7081F}">
<trueValue>
<decimal value="0" />
</trueValue>
<falseValue>
<decimal value="1" />
</falseValue>
</boolean>
</elements>
</policy>
我的预期结果:
name="Menu_Controls" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
name="Microsoft_Agent" key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
在此先感谢您的帮助。 东施
我的 ExtractMatches plugin 提供了一个 :YankMatches
命令,您可以用它提取匹配项并将它们放入暂存缓冲区。作为单线:
:execute 'YankMatches \<\%(name\|key\)="[^"]*"' | new | put!
结果:
name="Menu_Controls"
key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
name="Microsoft_Agent"
key="Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\AllowedControls"
两个 cmd 可以做到:
v/<policy /d
然后
%s/.* \(name="[^"]*"\).*\(key="[^"]*"\).*/ /g
如果您发现 :vimgrep
和 quickfix 列表确实有用,您可以使用 editqf.vim plugin 使 grep 结果的 quickfix 列表可编辑,然后使用例如@Kent 的回答中给出的 :%s
命令的变体,用于去除无关的东西。