如果您在第一行,按(大写)J 将把该行和下一行连接在一起,删除换行符。您也可以将其与计数结合起来,因此按 3J
会将所有 3 行结合在一起。
当然。 Vim 将 \n 字符识别为换行符,因此您只需搜索和替换即可。在命令模式下输入:
:%s/\n/
V
-isual 块并替换它。
在正常模式下在上线时,按 Shift+j。
您也可以在前面加上一个计数,因此顶行的 3J
会将所有这些行连接在一起。
正如提到的其他答案,(大写)J
和搜索 + 替换 \n
通常可用于去除换行符并连接行。
但是为了去掉最后一行的尾随换行符,你需要在 Vim 中这样做:
:set noendofline binary
:w
binary
:set noendofline
不起作用?
J
删除额外的前导间距(如果有),用一个空格连接行。 (有一些例外:在 /[.!?]$/
之后,可以插入两个空格;在 /^\s*)/
之前,不插入空格。)
如果您不希望这种行为,gJ
只需删除换行符,并且根本不会对空格做任何聪明的事情。
set backspace=indent,eol,start
在您的 .vimrc 中将允许您在插入模式下在 \n
(换行符)上使用 backspace
和 delete
。
set whichwrap+=<,>,h,l,[,]
将允许您在正常模式下使用 X
删除以前的 LF(在 col 1 中时)。
以下所有内容都假设您的光标位于第一行:
使用法线映射:
3Shift+J
使用 Ex 命令:
:,+2j
哪个是缩写
:.,.+2 join
也可以通过以下快捷方式输入:
3:j
一个更短的 Ex 命令:
:j3
:j!3
这可能取决于您的设置,但我通常使用 A<delete>
其中 A
附加在行尾。它可能需要 nocompatible
模式:)
我只需在要删除换行符的行上按 A(附加到行尾,使您进入插入模式),然后按删除。
:help 'backspace'
<CURSOR>Evaluator<T>():
_bestPos(){
}
光标在第一行
现在,在正常模式下
shift+v
2j
shift+j
或者
V2jJ
:普通 V2jJ
如果您不介意使用其他 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
ggVGJ
就更容易了。
问题是不可见的多个 char 0A (\n) 可能会累积。假设您要从第 100 行清理到最后:
键入 ESC 和 :(终端指挥官)
:110,$s/^\n//
在 vim 脚本中:
execute '110,$s/^\n//'
说明:从 110 到结尾搜索以新行开头的行(空白)并删除它们
如果您只是想快速连接文本文件中的所有行,对 TinkerTank 的解决方案的一个非常小的改进是在您的 .vimrc 中包含类似的内容:
nnoremap <leader>j :%s/\n/\ /g<CR>
这将全局替换换行符,这意味着您不会将一行的最后一个单词连接到下一行的第一个单词上。这非常适合我的典型用例。
如果您想保留有意的段落分隔符,V):join
可能是最简单的解决方案。
gJ
将避免添加 Vim 在使用J
时可能选择添加的空格。V
(可视线路模式)选择要加入的所有线路,然后按J
或gJ
:join
和:join!
,它们将连接保持光标位置的行,并且在连接点处不保留任何空间。您也可以将其映射为:nnoremap <Leader>j :joing<cr>
和nnoremap <Leader>gj :join!<cr>
。