在 Vim 中连接特定文本模式之间的行

在 Vim 中连接特定文本模式之间的行

我有一个如下所示的文本文件:

A.
text
text
text


A.
more text

more text

A.
more text

我想连接“标记”之间的所有线条,A.使其看起来像:

A.texttexttext
A.more textmore text
A.more text

我如何在 Vim 中做到这一点?

答案1

:%s/\n\(\(A\.$\)\@!.*\)/\1/

替换模式匹配:

  1. 新队,
  2. 包含以下组的

    1. 不是字符串A.后面紧跟着行尾,然后
    2. 直到行尾为止的任意字符

和:

  • 除起始换行符(即上面的组)之外的所有内容,

并在全球范围内推行这一举措。

答案2

这也有效(当第一行以 开头时A.

:v/^A/-1j!

答案3

更通用的解决方案,也适用于更复杂的输入

:$s/$/A./ | g/A./,/A./- s/\n\(A\.\)\@!//
:$s/A\.$//
  1. A.在文件末尾插入缺失值
  2. 删除标签之间的所有换行符A.
  3. 删除A.文件末尾的结束标记
    *我必须在单独的命令中运行此命令,否则 vim 会在删除换行符之前执行它。可能可以通过某种方式解决。

输入

B.
Don't join


A.
text
text
text


A.
more text

more text

A.
more text

输出

B.
Don't join


A.texttexttext
A.more textmore text
A.more text

相关内容