VIM全局多行搜索和替换维护缩进

时间:2013-07-25 18:25:03

标签: search vim replace whitespace indentation

我正在尝试执行多行搜索并替换,同时在我正在使用的代码中保留缩进,前导空格。下面是一个近似情况的文本样本。我遇到的问题是保留空白区域。我希望通过以下方法获得非插件,简单的简JIM解决方案:%s / ......

Windows 7上的VIM 7.2 autoindent正在开启 expandtab在

从:

开始
  apples,
  banannas,
  cherries,
  plums

  peas,
  green beans,
  corn,
  squash

        apples,
        banannas,
        cherries,
        plums

我想添加“梨子”,没有双引号,并且在列表中跟随“樱桃”行。期望的结果是:

  apples,
  banannas,
  cherries,
  pears,
  plums

  peas,
  green beans,
  corn,
  squash

        apples,
        banannas,
        cherries,
        pears,
        plums

尝试:%s / cherries,/& \ rpears,/ g 会产生......

      apples,
      banannas,
      cherries,
pears,
      plums

      peas,
      green beans,
      corn,
      squash

            apples,
            banannas,
            cherries,
pears,
            plums

尝试:%s / cherries,_ s。\ s * /& pears,\ r / g 会产生......

      apples,
      banannas,
      cherries,
      pears,
plums

      peas,
      green beans,
      corn,
      squash

            apples,
            banannas,
            cherries,
            pears,
plums

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以利用:g和自动缩进与普通o

:g/cherries,/normal opears,

答案 1 :(得分:3)

尝试在单词之前提取空白并将其插入替换部分(\1)。

注意我在开头使用\v但它与任何内容都不匹配,这是为了使正则表达式非常神奇,并避免转义许多字符,如括号。

:%s/\v(\s*)cherries,/&\r\1pears,/g

它产生:

  apples,
  banannas,
  cherries,
  pears,
  plums

  peas, 
  green beans,
  corn,
  squash

        apples,
        banannas,
        cherries,
        pears,
        plums