Windows 在Vim中,将文件中的所有行连接到一行的最简单方法是什么?
我想将文件中的所有行合并为一行。最简单的方法是什么?我在尝试使用替换时运气不好(Windows 在Vim中,将文件中的所有行连接到一行的最简单方法是什么?,windows,vim,Windows,Vim,我想将文件中的所有行合并为一行。最简单的方法是什么?我在尝试使用替换时运气不好(\r\n或\n在Windows上的s/\r\n/中似乎没有正确地使用)。在范围表达式中使用J似乎也不起作用(可能是因为执行第一个命令后,范围不再处于“同步”状态) 我试过:1$norm!但是这只完成了文件的一半——这很有意义,因为它只将每一行连接一次。啊,我找到了答案 :1,$join 工作起来很有魅力 编辑:正如评论中指出的: :%join -or- :%j …删除范围。另一种方法: ggVGJ :
\r\n
或\n
在Windows上的s/\r\n/
中似乎没有正确地使用)。在范围表达式中使用J
似乎也不起作用(可能是因为执行第一个命令后,范围不再处于“同步”状态)
我试过
:1$norm!但是这只完成了文件的一半——这很有意义,因为它只将每一行连接一次。啊,我找到了答案
:1,$join
工作起来很有魅力
编辑:正如评论中指出的:
:%join -or- :%j
…删除范围。另一种方法:
ggVGJ
:%s/\n/ /
“ggVG
”直观地选择所有行,并“J
”将它们连接起来。神秘的方式:
qqqqqJ@qq@q
(前三个q
清除q
寄存器,qqJ@qq
将一个宏记录到执行联接的q
寄存器中,然后调用q
,最后一个@q
运行它。您只需少敲三次键即可:
:1,$j
ed grand不是吗?我很惊讶竟然没有人提到另一种方式:
ggVGJ
:%s/\n/ /
我同样感到惊讶的是,没有人指出范围1,$
有一个写为%
的速记
(这与连接线的作用不同,但取决于事实上可能更合适的情况。)从正常模式开始,您可以通过3次击键来完成:
:%j
:
进入命令模式
%
引用文件中的所有行
j
执行join命令
现在看来,这在两行之间增加了一个空格。我不确定您是否需要它。这样的示例说明了为什么vim如此强大。“gg”、“V”、“G”、“J”,都是独立的命令。excellentAs公认的答案指出,:%j有效,它很短,并且不需要视觉模式。这也可以写成::%join您可能还想使用gJ操作而不是j。gJ操作在不插入或删除任何空格的情况下连接行。我自己回答这个问题,因为我认为s比ggVGJ快得多,而且稍微优雅一些。注意:%j!将不带空格地加入。(添加感叹号。)当然,您不能将gJ与%%一起使用。:-p无论如何,当您覆盖q寄存器时,为什么要先清除它。这就像执行一系列的“不操作”来延长您的命令。@Alf:因为如果q寄存器中有某些内容,您将在录制时执行该宏J@q“。另见”。