vim:如何删除换行符/换行符?

问题描述 投票:0回答:13

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

例如:

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

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

最终结果:

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

这在 Vim 中可能吗?

unix vim shell ssh vi
13个回答
709
投票

如果您在第一行,请按(大写)J 将该行和下一行连接在一起,删除换行符。您还可以将其与计数结合起来,因此按

3J
会将所有 3 行组合在一起。


99
投票

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

:%s/\n/

65
投票

正如其他答案提到的,(大写)

J
和搜索+替换
\n
通常可用于去除换行符和连接行。

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

:set noendofline binary :w
    

63
投票
在正常模式下位于上面一行时,按

Shift+j

您也可以在前面添加一个计数,因此顶行上的

3J

 会将所有这些行连接在一起。


32
投票

J

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

如果您不希望出现这种行为,

gJ

只需删除换行符,根本不会对空格进行任何巧妙的处理。


12
投票
set backspace=indent,eol,start

.vimrc 中的 
将允许您在插入模式下使用

backspace

delete
 上的 
\n
(换行符)。

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

将允许您在正常模式下使用

X

(在第 1 栏时)删除之前的 LF。


10
投票
以下所有内容均假设您的光标位于第一行:

使用法线贴图:

3Shift+J

使用 Ex 命令:

:,+2j

这是

的缩写

:.,.+2 join

也可以通过以下快捷键输入:

3:j

更短的 Ex 命令:

:j3
    

3
投票
这可能取决于您的设置,但我通常使用

A<delete>

 来做到这一点

其中

A

 是追加到行尾。它可能需要
nocompatible
模式:)


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


2
投票
<CURSOR>Evaluator<T>(): _bestPos(){ }

光标在第一行

现在,在正常模式下进行

shift+v 2j shift+j

V2jJ

:正常V2jJ


1
投票
如果你不介意使用其他 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
    

1
投票
问题在于多个 char 0A ( )不可见的可能会累积。 假设你想从第 100 行清理到最后:

输入 ESC 和 :(终端命令)

:110,$s/^\n//

在 vim 脚本中:

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

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


1
投票
如果您只是想快速连接文本文件中的所有行,那么对 TinkerTank 解决方案的一个非常微小的改进是在您的 .vimrc 中添加类似的内容:

nnoremap <leader>j :%s/\n/\ /g<CR>
这会全局用空格替换换行符,这意味着您最终不会将一行的最后一个单词连接到下一行的第一个单词上。这非常适合我的典型用例。

如果您想保持故意的段落分隔符,

V):join

可能是最简单的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.