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

Jor*_*mer 55 windows vim

我想将文件中的所有行连接成一行.这样做最简单的方法是什么?我尝试使用替换的运气很差(\r\n或者在Windows \n的情况下似乎没有正确选择s/\r\n//).J在范围表达式中使用似乎也不起作用(可能是因为在执行第一个命令后范围不再处于'sync').

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

ori*_*rip 130

其他方式:

ggVGJ
Run Code Online (Sandbox Code Playgroud)

" ggVG"可视地选择所有行,并" J"加入它们.

  • 像这样的例子说明了为什么 vim 如此强大。“gg”、“V”、“G”、“J”都是单独的命令。出色的 (2认同)

Jor*_*mer 63

啊,我找到了答案.

:1,$join
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.

编辑:正如评论中指出:

:%join   -or-    :%j
Run Code Online (Sandbox Code Playgroud)

...删除范围.

  • 注意:%j!将没有空格加入.(添加感叹号.)您不能将gJ与%一起使用. (8认同)
  • 或缩写为:%j (5认同)
  • 您可能还想使用gJ操作而不是j.gJ操作连接线而不插入或移除任何空格. (3认同)

小智 32

您可以从正常模式开始执行3次击键:

:%j
Run Code Online (Sandbox Code Playgroud)
  • : 进入命令模式
  • % 指的是文件中的所有行
  • j 执行join命令

现在似乎这在线之间增加了一个空格.我不确定你是否想要这个.


小智 15

你可以减少三次击键:

:1,$j
Run Code Online (Sandbox Code Playgroud)

是不是盛大?


Jos*_*Lee 9

神秘的方式:

qqqqqJ@qq@q
Run Code Online (Sandbox Code Playgroud)

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

  • @Alf:因为如果你在 q 寄存器中有一些东西,你将在记录“J@q”时执行该宏。 (2认同)

Ari*_*zis 8

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

:%s/\n/ /
Run Code Online (Sandbox Code Playgroud)

我同样感到惊讶的是,没有人指出该范围1,$有写的速记%.

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