在 Vim 中,将文件中的所有行合并为一行的最简单方法是啥?

Posted

技术标签:

【中文标题】在 Vim 中,将文件中的所有行合并为一行的最简单方法是啥?【英文标题】:In Vim, what is the simplest way to join all lines in a file into a single line?在 Vim 中,将文件中的所有行合并为一行的最简单方法是什么? 【发布时间】:2008-12-24 15:51:56 【问题描述】:

我想将文件中的所有行合并为一行。最简单的方法是什么?我在尝试使用替换时运气不佳(\r\n\n 在 Windows 上的 s/\r\n// 的情况下似乎没有被正确拾取)。在范围表达式中使用J 似乎也不起作用(可能是因为在执行第一个命令后范围不再处于“同步”状态)。

我尝试了:1,$norm! J,但这只完成了文件的一半——这很有意义,因为它只将每一行加入一次。

【问题讨论】:

另见“How to delete the '\n' of every line in a file”。 【参考方案1】:

另一种方式:

ggVGJ

ggVG”直观地选择所有行,“J”加入它们。

【讨论】:

这样的例子说明了为什么 vim 如此强大。 “gg”、“V”、“G”、“J”都是单独的命令。优秀 正如接受的答案指出的那样,:%j 有效,它很短,并且不需要可视模式。【参考方案2】:

啊,我找到了答案。

:1,$join

像魅力一样工作。

编辑:正如评论中指出的那样:

:%join   -or-    :%j

...删除范围。

【讨论】:

这也可以写成::%join 您可能还想使用 gJ 操作而不是 j。 gJ 操作在不插入或删除任何空格的情况下连接行。 我自己回答了这个问题,因为我认为这比 ggVGJ 快得多,而且更优雅一些。 注意:%j!将加入没有空格。 (添加感叹号。)您不能将 gJ 与 % 一起使用。【参考方案3】:

从普通模式开始,您可以通过 3 次击键来完成:

:%j
: 进入命令模式 % 引用文件中的所有行 j执行join命令

现在看来,这在行之间增加了一个空格。我不确定你是否想要这个。

【讨论】:

【参考方案4】:

您可以少敲三下键:

:1,$j

不是很好吗?

【讨论】:

【参考方案5】:

神秘的方式:

qqqqqJ@qq@q

(前三个q清除q寄存器,qqJ@qq记录一个宏到q寄存器执行Join,然后调用q,最后一个@q运行它。

【讨论】:

当然。 :-p reddit.com/r/programming/comments/61no8/… 为什么要先清除 q 寄存器,无论如何都要覆盖它。这就像做一堆无操作来延长你的命令。 @Alf : 因为如果你在 q 寄存器中有东西,你会在录制'J@q'时执行那个宏。【参考方案6】:

我很惊讶没有人提到另一种方式:

:%s/\n/ /

同样令我惊讶的是,没有人指出1,$ 的范围有一个写成% 的速记。

(这与加入线条的作用不同,但取决于实际上可能更合适的情况。)

【讨论】:

以上是关于在 Vim 中,将文件中的所有行合并为一行的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

vim编辑

将具有相同 id 的行合并为一行,保留所有数据

vim调用替换文件内容

linux 如何合并2个分区

Vim合并行

vim用法