gpt4 book ai didi

xml - 我如何使用 Vim 跳转到 XML 元素的下一个兄弟元素?

转载 作者:数据小太阳 更新时间:2023-10-29 01:41:46 25 4
gpt4 key购买 nike

我正在编辑一些 XML 文件,它们具有如下结构:

<Parent>
<Child name="Fred">
Some content
</Child>
<Child name="George" value="other content" />
...
</Parent>

换句话说,某些父元素的内容将是一系列子元素(在本例中具有相同的名称)。例如,想一想目录中待售元素的列表,甚至是 <xsl:template> 的序列。在<xsl:stylesheet> .

当我在父元素中时,我想做的是在 vim 中映射一些键序列以转到下一个(或上一个)子元素,理想情况下能够用一个计数作为前缀(这样我可以“例如,转到下一个 child 的第五个”。理想情况下,我需要在 Child 元素的内容之外才有意义,这样我就可以在 Child 元素内部使用相同的 map 在 Grandchildren 之间跳转。我在网上寻找插件/解决方案,但没有找到任何东西。

我目前能做的是vat<Esc>j如果下一个子节点位于该子节点关闭后的紧邻下一行(类似于前一个子节点的 vato<Esc>k)。但是,我对此有一些问题:

  1. 我不能用计数作为前缀;在映射导致奇怪的行为之前这样做(请参阅 :help v ,在 v 前加上 count 并不能满足我的要求);在映射(例如 v2at)中这样做会连续选择“更高”的封闭元素。
  2. 如果子元素的序列不是紧跟在彼此之后,每个开始标记紧跟在前一个结束标记的下一行之后,这将不起作用。
  3. 如果我在父项的最后一个子项上执行此操作,我将转到父项的结束标记(或它的某些文本内容,如果存在,或其他任何内容)
  4. 破坏之前选择的区域

第 2 点并不是非常重要 - 我可能可以对正在编辑的文件强制执行正确的格式设置,并且可以使用 xmllint 轻松完成此操作。如果可能的话,我仍然更喜欢更“语义化”的优雅和健壮性方法。3 号真的没什么大不了的,如果我可以留在原地,或者在最后一个 child 上去第一个 child ,那将是一个不错的奖励。4号对我来说根本不是问题。也许它会干扰一个插件,或者我 future 的工作,但无论如何,当然不是关键。

虽然第 1 个是关键的,因为我经常发现自己想要放下这么多 child 。目前,我正在寻找我想去的 child ,浏览我那条线的亲属号码,然后向下(或向上)移动那么多条线。这是

  • 很烦人,而且我对 XML 内容的看法并不明显
  • 不容易编写脚本/宏,至少不稳健

另一个可能的解决方案是搜索 Child然后去[count]n[count]N .这也有一些问题:

  1. 要么我必须考虑并输入名称 Child我自己,这完全不是可编程的;或者我做类似 vato<Esc>l* 的事情不能像我想要的那样以计数为前缀
  2. 嵌套时中断 Child彼此内部的元素(有用例),拆分Child跨越单独的元素 Parent元素,当字符串"Child"出现在除 Child 以外的任何地方元素等
  3. 破坏之前的搜索;当我使用搜索来突出显示当前相关的内容时,或者在跳转到下一个元素后仍然希望能够跳转到下一个搜索项时,这会很麻烦。

理想情况下,我会创建某种功能+命令+映射,以稳健、智能的方式处理所有这些。然后我就可以在编辑时无意识地使用我的命令,并且毫不费力地尝试录制一个通过在元素之间跳转等方式工作的宏。但是,我对 vimscripting 还是很陌生,不太确定如何开始。

最佳答案

它们显然不能满足您的所有要求,但这些粗略的命令可能会有所帮助……

/^\s\{<C-r>=indent(".")<CR>}<\w\+\s<CR>
?^\s\{<C-r>=indent(".")<CR>}<\w\+\s<CR>

向前/向后跳转到同一缩进级别的下一个 XML 标记。

关于xml - 我如何使用 Vim 跳转到 XML 元素的下一个兄弟元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com