在Vim中删除换行符
有没有办法在Vim中的一行的末尾删除换行符,以便将下一行添加到当前行?
例如:
Evaluator<T>(): _bestPos(){ }
我想把这一切都放在一条线上,不要复制线条并粘贴到前一个线条中。 看来我应该能够将光标放到每行的末尾,按下一个键,然后让下一行跳转到光标所在的同一行上。
最终结果:
Evaluator<T>(): _bestPos(){ }
这在Vim中可能吗?
如果你在第一行,按(大写) J将join该行和下一行,删除换行符。 你也可以把这个和count结合起来,所以按3J
就会把所有的3条线结合在一起。
当然。 Vim将\ n字符识别为换行符,因此您可以search并replace。 在命令模式下键入:
:%s/\n/
在正常模式的上一行中,按Shift + j 。
你也可以预先计数,所以最上面的3J
会把所有这些行加在一起。
J
删除额外的前导间距(如果有的话),join一行空格。 (有些例外:在/[.!?]$/
之后,可能会插入两个空格;在/^\s*)/
,不会插入空格。
如果你不想要这样的行为, gJ
只是简单地删除换行符,并且根本不用空格。
以下所有假设您的光标在第一行:
使用正常的映射:
3 Shift + J
使用Ex命令:
:,+2j
这是一个缩写
:.,.+2 join
也可以通过以下快捷方式input:
3 : j
更短的Ex命令:
:j3
在vim中:
:set noendofline binary :w
这可能取决于你的设置,但我通常使用A<delete>
A
在行尾添加。 这可能需要nocompatible
模式:)
<CURSOR>Evaluator<T>(): _bestPos(){ }
游标在第一行
现在,在正常模式下做
shift+v 2j shift+j
要么
V2jJ
:正常V2jJ
set backspace=indent,eol,start
在.vimrc中将允许您在插入模式下使用backspace
和\n
(换行符) delete
。
set whichwrap+=<,>,h,l,[,]
将允许您在正常模式下用X
删除前一个LF(当在第一列时)。
我只需要按A(追加到行尾,使你进入插入模式)在你想删除换行的行上,然后按下delete。
如果你不介意使用其他shell工具,
tr -d "\n" < file >t && mv -ft file sed -i.bak -e :a -e 'N;s/\n//;ba' file awk '{printf "%s",$0 }' file >t && mv -ft file
问题是多个char 0A(\ n)是不可见的可能积累。 设置你想从100行清理到最后:
键入ESC和:(terminal指挥官)
:110,$s/^\n//
在一个vim脚本中:
execute '110,$s/^\n//'
说明:从110到最后search以新行开头的行(空白)并将其删除