在Vim中删除换行符

有没有办法在Vim中的一行的末尾删除换行符,以便将下一行添加到当前行?

例如:

Evaluator<T>(): _bestPos(){ } 

我想把这一切都放在一条线上,不要复制线条并粘贴到前一个线条中。 看来我应该能够将光标放到每行的末尾,按下一个键,然后让下一行跳转到光标所在的同一行上。

最终结果:

 Evaluator<T>(): _bestPos(){ } 

这在Vim中可能吗?

如果你在第一行,按(大写) J将join该行和下一行,删除换行符。 你也可以把这个和count结合起来,所以按3J就会把所有的3条线结合在一起。

当然。 Vim将\ n字符识别为换行符,因此您可以search并replace。 在命令模式下键入:

 :%s/\n/ 

在正常模式的上一行中,按Shift + j

你也可以预先计数,所以最上面的3J会把所有这些行加在一起。

J删除额外的前导间距(如果有的话),join一行空格。 (有些例外:在/[.!?]$/之后,可能会插入两个空格;在/^\s*)/ ,不会插入空格。

如果你不想要这样的行为, gJ只是简单地删除换行符,并且根本不用空格。

以下所有假设您的光标在第一行:

使用正常的映射:

3 Shift + J

使用Ex命令:

 :,+2j 

这是一个缩写

 :.,.+2 join 

也可以通过以下快捷方式input:

3 j

更短的Ex命令:

 :j3 

在vim中:

 :set noendofline binary :w 

这可能取决于你的设置,但我通常使用A<delete>

A在行尾添加。 这可能需要nocompatible模式:)

 <CURSOR>Evaluator<T>(): _bestPos(){ } 

游标在第一行

现在,在正常模式下做

 shift+v 2j shift+j 

要么

 V2jJ 

:正常V2jJ

 set backspace=indent,eol,start 

在.vimrc中将允许您在插入模式下使用backspace\n (换行符) delete

 set whichwrap+=<,>,h,l,[,] 

将允许您在正常模式下用X删除前一个LF(当在第一列时)。

我只需要按A(追加到行尾,使你进入插入模式)在你想删除换行的行上,然后按下delete。

如果你不介意使用其他shell工具,

 tr -d "\n" < file >t && mv -ft file sed -i.bak -e :a -e 'N;s/\n//;ba' file awk '{printf "%s",$0 }' file >t && mv -ft file 

问题是多个char 0A(\ n)是不可见的可能积累。 设置你想从100行清理到最后:

键入ESC和:(terminal指挥官)

 :110,$s/^\n// 

在一个vim脚本中:

 execute '110,$s/^\n//' 

说明:从110到最后search以新行开头的行(空白)并将其删除