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

例如:

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

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

最终结果:

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

这在Vim中可行吗?


当前回答

如果你在第一行,按下(大写)J将把这一行和下一行连接在一起,删除换行符。你也可以把它和计数结合起来,所以按3J会把这3行合并在一起。

其他回答

set backspace=indent,eol,start

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

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

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

如果你只是想快速连接文本文件中的所有行,对TinkerTank的解决方案有一个非常微小的改进,就是在你的.vimrc中有这样的东西:

nnoremap <leader>j :%s/\n/\ /g<CR>

这将全局地用空格替换换行符,这意味着您不会将一行的最后一个单词连接到下一行的第一个单词。这非常适合我的典型用例。

如果你想保持有意的段落间隔,V):join可能是最简单的解决方案。

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

第一行光标

现在,在正常模式做

shift+v
2j
shift+j

or

V2jJ

:正常V2jJ

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

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

:110,$s/^\n//

在vim脚本中:

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

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

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

如果您不想要这种行为,gJ只需删除换行符,并且根本不使用空格进行任何巧妙的处理。