1

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

Windows 7 上的 VIM 7.2 自动缩进开启 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

谢谢!

4

2 回答 2

4

您可以利用:gnormal 自动缩进o

:g/cherries,/normal opears,

于 2013-07-25T19:12:51.967 回答
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
于 2013-07-25T18:30:59.887 回答