在 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 中,将文件中的所有行合并为一行的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章