vim:搜索,捕获&使用正则表达式替换不同的行

时间:2016-02-17 19:01:24

标签: regex linux vim replace

这里有相对较新的linux / vim / regex用户。我想使用正则表达式搜索数字模式,捕获它,然后使用捕获的值将字符串附加到上一行。换句话说......我有一个格式文件:

  

标题:description_id

     

text:{en:'2。文字说明'}

我想从文本字段中捕获值并将它们附加到标题字段的开头...以产生类似这样的内容:

  

标题:q2_description_id

     

text:{en:'2。文字说明'}

我觉得我遇到了一种在搜索和参考中引用其他行的方法。替换,但现在很难找到。或者宏可能是合适的。任何帮助将不胜感激...谢谢!

2 个答案:

答案 0 :(得分:1)

也许是这样的:

:%s/\(title: \)\(.*\n\)\(text: \D*\)\(\d*\)/\1q\4_\2\3\4/

我们正在寻找4个部分:

  1. "title: "
  2. 其余行和\n
  3. "text: "以及直到下一位数
  4. 的所有内容
  5. 中的第一个连续数字字符串

    并将它们吐出来,4)插入1)和2)之间。

    编辑:彼得在评论中提出的更短的解决方案:

    :%s/title: \zs\ze\_.\{-}text: \D*\(\d*\)/q\1_/
    

答案 1 :(得分:0)

使用\ n作为新行(并且^ v +输入替代行上的新行):一个快速而不是很优雅的例子:

    <script src='bower_components/mocha/mocha.js'></script>
    <script src='bower_components/chai/chai.js'></script>
    <script>
        mocha.setup('bdd');
    </script>
    <script src="bower_components/angular-mocks/angular-mocks.js"></script>