微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Vim跳转到XML元素的下一个兄弟节点?

我正在编辑一些 XML文件,现在有一些类型的结构,如:
<Parent>
  <Child name="Fred">
    Some content
  </Child>
  <Child name="George" value="other content" />
  ...
</Parent>

换句话说,一些父元素的内容将是一个子元素的序列(在这种情况下具有相同的名称).作为示例,请考虑目录中出售的项目列表,甚至是 序列在< xsl:stylesheet>中.

我想做的是将vim中的一些关键序列映射到父元素中的下一个(或上一个)子元素中,并且理想地可以将其前缀到计数(以便我可以“去”对于第五个下一个孩子,例如)理想情况下,我将需要超出Child元素的内容,这样才有意义,所以在Child元素内部,我可以用同一个地图在Sunchildren之间跳转.插件/解决方案,没有找到任何东西.

在下一个孩子在该孩子关闭之后的下一个行(即前一个孩子的同样vato< Esc> k)的情况下,我现在可以做的是vat& Esc> j.但是,我有一些问题:

>我不能用这个数字前缀在映射之前这样做会导致奇怪的行为(请参阅:help v,前缀v与count不一样我想在这里);在映射(例如v2at)内进行此操作,连续选择“较高”的包围元素.
>如果子元素的顺序不直接相互跟随,则每个开始标记都跟在上一个结束标记的直接下一行之后,这将不起作用.
>如果我在父母的最后一个孩子这样做,我会去父母的结束标签(或其一些文本内容,如果存在,或其他)
> Clobbers先前选择的区域

数字2并不是非常关键的 – 我可以对我正在编辑的文件执行正确的格式化,并且可以使用xmllint轻松实现.如果可能,我仍然希望采用更“语义”的方式来优雅和健壮.
第3号真的不是什么大不了的事情,如果我可以留在我所在的地方,或者在最后一个孩子的时候去第一个孩子,这将是一个很好的奖励.
对于我来说,第4号还没有成为一个问题.也许它会干扰插件,或者我将来的工作,但无论如何,当然不是关键.

第一号是关键的,因为我经常发现自己想要这么多的孩子下来.目前,我正在寻找我想要的孩子,看看我的相对于该线的相对数,然后去下去(或上).这是

烦人的,并不明显的我对XML的内容的想法
>不容易脚本/宏观,至少不健壮

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

>我必须想到并键入自己的名字,这完全不可编程;或者我做一些类似vato< Esc> l *的东西,不能以我想要的方式以计数为前缀
>在将子元素嵌套在彼此之间时断开(有用例),当单个“Parent”字符串出现在Child元素之外的任何位置时,将单独的Parent元素分割为Child元素.
> Clobbers以前的搜索;这是一个麻烦,当我使用搜索来突出显示当前相关的某些东西,或者仍然希望跳到下一个搜索项目跳到下一个元素.

理想情况下,我将创建一些功能命令映射,以强大,智能的方式处理所有这些.然后,我可以在编辑时无意中使用我的命令,并且没有头痛的尝试记录通过在元素之间跳转等工作的宏.但是,我仍然相当新的vimscripting,我不太确定如何开始.

如果你经常需要这个动作,那么为它创建一个自定义的动作是有意义的.我的 CountJump plugin,这很容易:
call CountJump#Motion#MakeBracketMotion('<buffer>','','<Child','<Child.*\zs/>\|</Child>',0)

这将修改[[[]等运动(您也可以选择其他映射),并支持计数. (将其放入〜/ .vim / ftplugin / xml_motions.vim)

原文地址:https://www.jb51.cc/vim/383770.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐