删除Vim中的换行符

der*_*ann 257 unix vi vim ssh shell

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

例如:

Evaluator<T>():
    _bestPos(){
}
Run Code Online (Sandbox Code Playgroud)

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

最终结果:

Evaluator<T>(): _bestPos(){ }
Run Code Online (Sandbox Code Playgroud)

这可能在Vim?

Xha*_*tar 562

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

  • 如另一个答案中所述,`gJ`将避免添加Vim在使用`J`时可能选择添加的空格. (26认同)
  • 您也可以使用"V"(视线模式)选择要加入的所有行,然后按`J`或`gJ` (4认同)

Tin*_*ank 77

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

:%s/\n/
Run Code Online (Sandbox Code Playgroud)

  • 删除%会解决这个问题.然后它只会发生在光标所在的行上.或者,您可以指定一个范围,例如:11,15s/\n /(第11-15行)或:,+ 7s/\n /(此行和后7行)或:-3,s/\n/(前三行和这一行)......你明白了 (15认同)

All*_*tor 49

在正常模式的上线,按Shift+ j.

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


eph*_*ent 32

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

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


Nes*_*dyd 26

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

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

:set noendofline binary
:w
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.我试图用vim删除单行文件末尾的换行符. (2认同)
  • 虽然这不是OP的具体问题,但这是我的问题,互联网搜索让我找到了这里,所以谢谢! (2认同)

kzh*_*kzh 10

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

使用普通映射:

3Shift+J

使用Ex命令:

:,+2j
Run Code Online (Sandbox Code Playgroud)

这是.的缩写

:.,.+2 join
Run Code Online (Sandbox Code Playgroud)

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

3:j

一个更短的Ex命令:

:j3
Run Code Online (Sandbox Code Playgroud)

  • 它们之间没有空格`:j!3` (2认同)

lak*_*tak 6

set backspace=indent,eol,start
Run Code Online (Sandbox Code Playgroud)

在您的.vimrc文件中,您可以在插入模式下使用backspaceand deleteon \n(换行符)。

set whichwrap+=<,>,h,l,[,]
Run Code Online (Sandbox Code Playgroud)

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