是否有一种方法可以在Vim中删除一行末尾的换行符,以便下一行被追加到当前行?

例如:

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

我想把这些都放在一行上,而不是复制和粘贴到前面的一行中。似乎我应该能够将光标放到每行的末尾,按下一个键,然后让下一行跳转到光标所在的同一行上。

最终结果:

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

这在Vim中可行吗?


当前回答

正如其他答案所提到的,(大写)J和搜索+替换\n通常可用于剥离换行符和连接行。

但是为了去掉最后一行末尾的换行符,你需要在Vim中这样做:

:set noendofline binary
:w

其他回答

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

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

:110,$s/^\n//

在vim脚本中:

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

说明:从110到最后 搜索以new line开头的行(为空) 然后移除它们

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

您还可以预先添加一个计数,因此顶部一行的3J将把所有这些行连接在一起。

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

tr -d "\n" < file >t && mv -f t file

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

awk '{printf "%s",$0 }' file >t && mv -f t file
set backspace=indent,eol,start

在您的.vimrc中,将允许您在插入模式中使用退格和删除\n(换行符)。

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

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

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

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