gpt4 book ai didi

vim - 将行合并到 vim 中的段落

转载 作者:行者123 更新时间:2023-12-05 09:18:46 29 4
gpt4 key购买 nike

我有以下多行文字。连续的行是一个段落的一部分。但是由空行分隔的行是单独段落的一部分。因此,以下文本有 2 个段落的行:

first group of lines.
first group of lines.
first group of lines.
first group of lines.
first group of lines.
first group of lines.

second group of lines.
second group of lines.
second group of lines.
second group of lines.
second group of lines.
second group of lines.

我正在使用以下代码将连续的行合并为段落:

%s/\n\n\@!//g

结果是:

first group of lines.first group of lines.first group of lines.first group of lines.first group of lines.first group of lines.
second group of lines. second group of lines. second group of lines. second group of lines. second group of lines. second group of lines.

因此形成了段落,但它们没有被空行分隔。如果我再次运行我的命令,这些也将合并为一个段落。如何修改我的代码以在新制作的段落之间保留一个空行,以便输出如下:

first group of lines.first group of lines.first group of lines.first group of lines.first group of lines.first group of lines.

second group of lines. second group of lines. second group of lines. second group of lines. second group of lines. second group of lines.

感谢您的帮助。

最佳答案

考虑到这是一个 vim 问题,这里有一个 vim 答案(与 RegEx 答案相反)。

vim 将每一行视为一个段落,因此您可以从段落中的任何位置输入:

vipgJ

这会直观地选择段落 (vip) 并在不添加或删除空格的情况下连接所有行 (gJ)。

这是一种创建宏的方法,它连接当前段落,然后移动到下一个段落,准备再次运行:

qqvipgJjjq

现在使用 @q 运行宏。如果您知道要运行它多少次,您可以使用该数字作为前缀 5@q,或者只输入一个大数字以将其应用于文档的其余部分。

对于一个非常酷的技巧,您甚至可以编写宏来递归调用自身。它会一直调用自己,直到它不再进行更改 - 在这种情况下,当它到达文档末尾时(确保您的 q 寄存器在开始之前为空,否则您将应用现有的宏在编写新的时 - 你可以通过键入 qqq 来清除它):

qqvipgJjj@qq@q

解释:

  • qq:开始将宏记录到寄存器“q”中。
  • vipgJ:加入当前段落。
  • jj:向下移动 2 行到下一段。
  • @q 运行宏“q”(录制时什么都不做,因为寄存器“q”为空)。
  • q:停止录制宏。
  • @q:运行宏。

关于vim - 将行合并到 vim 中的段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43709363/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com