关于unix:删除Vim中的换行符

Delete newline in Vim

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

例如:

1
2
3
Evaluator< T >():
    _bestPos(){
}

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

最终结果:

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

这可能在Vim?


如果你在第一行,按(大写)J将连接该行和下一行,删除换行符。您还可以将其与计数结合使用,因此按3J将所有3条线组合在一起。


当然。 Vim将 n字符识别为换行符,因此您只需搜索和替换即可。
在命令模式下输入:

1
2
:%s/
/


在正常模式的上线,点击Shift + j

您也可以添加一个计数,因此顶行的3J会将所有这些行连接在一起。


J删除额外的前导间距(如果有),使用单个空格连接线。 (除了一些例外:在/[.!?]$/之后,可以插入两个空格;在/^\s*)/之前,不插入空格。)

如果您不想要这种行为,gJ只是删除换行符,并且根本不会使用空格做任何事情。


正如其他提到的答案,(大写)J和搜索+替换
一般可以使用换行换行符和连接行。

但是为了摆脱最后一行中的尾随换行符,你需要在Vim中执行此操作:

1
2
:set noendofline binary
:w


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

使用普通映射:

3Shift + J

使用Ex命令:

1
:,+2j

这是。的缩写

1
:.,.+2 join

也可以通过以下快捷方式输入:

3j

一个更短的Ex命令:

1
:j3


1
set backspace=indent,eol,start

在.vimrc中,您可以在插入模式下在
(换行符)上使用backspacedelete

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

将允许您使用X(在col 1中时)在正常模式下删除以前的LF。


1
2
3
<CURSOR>Evaluator< T >():
    _bestPos(){
}

光标在第一行

现在,在NORMAL MODE中

1
2
3
shift+v
2j
shift+j

要么

1
V2jJ

:正常的V2jJ


这可能取决于您的设置,但我通常使用A执行此操作

其中A附加在行的末尾。它可能需要nocompatible模式:)


问题是不可见的倍数char 0A( n)可能会累积。
想要从第100行清理到最后:

键入ESC和:(终端指挥官)

1
2
:110,$s/^
//

在vim脚本中:

1
2
execute '110,$s/^
//'

说明:从110到结束
搜索以新行开头的行(为空白)
并删除它们


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

1
2
3
4
5
6
7
tr -d"
" < file >t && mv -f t file


sed -i.bak -e :a -e 'N;s/
//;ba'
file

awk '{printf"%s",$0 }' file >t && mv -f t file


我只需要在要删除换行符的行上按A(附加到行尾,使您进入插入模式),然后按删除。