gpt4 book ai didi

vim - 加入用制表符分隔的每 3 行(vim)

转载 作者:行者123 更新时间:2023-12-05 00:55:00 25 4
gpt4 key购买 nike

我想用制表符作为分隔符加入文件的每 3 行。使用 Vim 怎么做?

我知道宏机制,但我正在寻找更优雅的东西。

最佳答案

事实证明这是可行的:

:g/\n/,+1s//\t

:global 将匹配缓冲区中的每一行(或范围内,如果你传递一个范围的话。)

/\n/ 被用作匹配每一行的正则表达式,在这种情况下,匹配换行符本身。我们可以使用类似 /^/ 的东西(或者可能是 /.//\S/ 来匹配非空或非空白行),这里我们使用 /\n/ 因为我们想在下面的 :s 中使用该模式,所以我们可以省略它以使用相同的模式.

然后,对于由 :g 处理的每一行,我们使用该行的范围直到行 +1。这意味着两行,在这种情况下,当前行和下一行。由于我们要连接三行,所以我们要替换两行的换行符,所以从当前行到 +1 行。 (您可以将其概括为使用 + 要加入的 block 中的行数减去 2。)

最后,我们执行替换s//\t,相当于s/\n/\t/(使用空模式会匹配之前的用于,在这种情况下传递给 :g。)这个 :substitute 将用制表符替换匹配的换行符,有效地连接它匹配的行。由于我们使用的是两行的范围,它一次只会这样做两行,有效地替换两个换行符,这将连接三行。

这是因为 :global 在受影响的行上进行编辑时的工作方式。它首先“标记”应该采取行动的行,但如果该行不再存在,它将跳过它。因此,虽然它会首先标记每一行,但当 :s 将每第二行和第三行连接到 block 中的第一行时,它们上的标记将不再存在,因此最终结果是 :g 不会再次尝试处理这一行,而是继续下一个“标记”的行,这将成为下一个 block 的开始。

关于vim - 加入用制表符分隔的每 3 行(vim),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65593858/

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