使用 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 命令的变体,用于去除无关的东西。