加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Vim宏或插件顺序重新编号xml元素?

发布时间:2020-12-15 21:46:47 所属栏目:安全 来源:网络整理
导读:我有多个 XML文件,我需要每天编辑.我无法控制读取这些文件的源,也无法控制XML的格式. 问题是每个元素在每个块中都需要自己的序列号.有时每个块中可以有超过200个元素.当我需要在现有的长块中提前插入命令时,我必须手动重新编号每个后续元素,这些元素很乏味且
我有多个 XML文件,我需要每天编辑.我无法控制读取这些文件的源,也无法控制XML的格式.

问题是每个元素在每个块中都需要自己的序列号.有时每个块中可以有超过200个元素.当我需要在现有的长块中提前插入命令时,我必须手动重新编号每个后续元素,这些元素很乏味且容易出错.

此外,名称/值对与所需的顺序编号无关.下面的值“origcmd1”可能是“foobar98765”.它们的数量只是为了说明我的问题.

例:

从这开始:

<block1>
    <cmd1 name="origcmd1"></cmd1>
    <cmd2 name="origcmd2">someCmdsTakeParams,param2</cmd2>
    <cmd3 name="origcmd3"></cmd3>
</block1>

<block3>                             <c>no guarantee blocks are sequential #</c>
    <cmd1 name="cmd1"></cmd1>
    <cmd2 name="cmd2"></cmd2>
    <cmd3 name="cmd3"></cmd3>
</block3>

如果我需要提前添加命令,请说origcmd1和origcmd2:

<block1>
    <cmd1 name="origcmd1"></cmd1>
    <cmd2 name="NEWcmd1"></cmd2>                    <c>cmd2 & cmd3 inserted</c>
    <cmd3 name="NEWcmd1"></cmd3>
    <cmd4 name="origcmd2">someCmdsTakeParams,param2</cmd4>
    <cmd5 name="origcmd3"></cmd5>
</block1>

<block3>                             <c>no guarantee blocks are sequential #</c>
    <cmd1 name="cmd1"></cmd1>
    <cmd2 name="cmd2"></cmd2>
    <cmd3 name="cmd3"></cmd3>
</block3>

我现在必须通过手动重新编号现在的cmd4和cmd5.当有数百个命令时,这会非常令人沮丧.

到目前为止,解决方案包括尝试编写一个宏来重新编号从第一行开始,假设它总是正确编号为1.然后我会使用一系列删除/粘贴和Ctrl-a来递增每个前进的行号.不幸的是,我永远无法让宏工作正常.

我还查看了vim.org上的vim插件,但我发现没有任何我认为是解决方案.

Vim对我来说是新的,但我喜欢它,这似乎是它非常适合解决的问题类型.关于我错过的快速技术或插件的任何想法都表示赞赏.

解决方法

以下似乎对我有用:

function! FixBlock()
  let g:pos_end = search("</bloc")
  call search("<block","be")
  let s:i = 0
  while getpos(".")[1] < g:pos_end
    call search("cmd","e")
    let s:i = s:i + 1
    exe 's/^(.*)(<cmd[^ ]*) (.*)/1cmd' . s:i . ' 3/'
    "exe 's/^(.*)(cmd.*) (.*)/1cmd' . s:i . ' 3/'
    exe 's?(.*)(</cmd.*)>(.*)?1</cmd' . s:i . '>3'
    normal j0
  endwhile
endfunction

map,fb :call FixBlock()

为了它的工作,你应该在你想要修复的块内.只需在正常模式下输入fb即可完成工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读