Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在Vim中,将文件中的所有行连接到一行的最简单方法是什么?_Windows_Vim - Fatal编程技术网

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“。另见”。