有没有办法在 Vim 中删除行尾的换行符,以便将下一行追加到当前行?
例如:
Evaluator<T>():
_bestPos(){
}
我想将这一切放在一行中,而不是复制行并将它们粘贴到前一行中。看起来我应该能够将光标放在每行的末尾,按下一个键,然后让下一行跳到光标所在的同一行。
最终结果:
Evaluator<T>(): _bestPos(){ }
这在 Vim 中可能吗?
如果您在第一行,请按(大写)J 将该行和下一行连接在一起,删除换行符。您还可以将其与计数结合起来,因此按
3J
会将所有 3 行组合在一起。
当然可以。 Vim 识别 字符作为换行符,因此您只需搜索和替换即可。 在命令模式下输入:
:%s/\n/
正如其他答案提到的,(大写)
J
和搜索+替换\n
通常可用于去除换行符和连接行。
但是为了去掉最后一行中的尾随换行符,你需要在 Vim 中这样做:
:set noendofline binary
:w
Shift+j。
您也可以在前面添加一个计数,因此顶行上的3J
会将所有这些行连接在一起。
J
删除额外的前导间距(如果有),用单个空格连接行。 (有一些例外:
/[.!?]$/
之后,可以插入两个空格;
/^\s*)/
之前,不插入空格。)如果您不希望出现这种行为,
gJ
只需删除换行符,根本不会对空格进行任何巧妙的处理。
set backspace=indent,eol,start
.vimrc 中的将允许您在插入模式下使用
backspace
和
delete
上的
\n
(换行符)。
set whichwrap+=<,>,h,l,[,]
将允许您在正常模式下使用
X
(在第 1 栏时)删除之前的 LF。
使用法线贴图:
3Shift+J
使用 Ex 命令:
:,+2j
这是
的缩写
:.,.+2 join
也可以通过以下快捷键输入:
3:j
更短的 Ex 命令:
:j3
A<delete>
A
是追加到行尾。它可能需要
nocompatible
模式:)
<CURSOR>Evaluator<T>():
_bestPos(){
}
光标在第一行
现在,在正常模式下进行
shift+v
2j
shift+j
或
V2jJ
:正常V2jJ
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
输入 ESC 和 :(终端命令)
:110,$s/^\n//
在 vim 脚本中:
execute '110,$s/^\n//'
说明:从110到最后 搜索以新行开头的行(空白) 并删除它们
nnoremap <leader>j :%s/\n/\ /g<CR>
这会全局用空格替换换行符,这意味着您最终不会将一行的最后一个单词连接到下一行的第一个单词上。这非常适合我的典型用例。如果您想保持故意的段落分隔符,
V):join
可能是最简单的解决方案。