在Vim中,将文件中所有行join单行的最简单方法是什么?

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

我试过了:1,$norm! J 但是这只做了一半的文件 – 这是有道理的,因为它只是join每一行。

其他方式:

 ggVGJ 

ggVG ”直观地select所有行,“ J ”join它们。

啊,我find了答案。

 :1,$join 

奇迹般有效。

编辑 :正如在评论中指出:

 :%join -or- :%j 

…删除范围。

您可以从正常模式开始3个按键操作:

 :%j 
  • :进入命令模式
  • %是指文件中的所有行
  • j执行连接命令

现在看来,这增加了线条之间的空间。 我不确定你是否想要这个。

您可以在三个按键中完成:

 :1,$j 

不是盛大的?

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

 :%s/\n/ / 

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

(这与join界限并不是一回事,而是取决于实际上可能更合适的情况。)

神秘的方式:

 qqqqqJ@qq@q 

(前三个q清除q寄存器, qqJ@qqlogging一个执行Join的q寄存器的macros,然后调用q ,最后一个@q运行它。