Answers:
该gJ
组合做到这一点; 来自:help gJ
:
连接[count]行,最少两行。请勿插入或删除任何空格。
J
如果您想保存击键,可以将其重新绑定到:
:nnoremap J gJ
请注意,这不会删除任何空格,因此,如果当前行以空格结尾或下一行以一个或多个空格开头,它们将保持原样。
所以:
Hello
world
成为:
Hello world
我们可以Jx
在这种情况下使用,那么它将是Helloworld
,但并非在所有情况下都有效;来自帮助:
连接突出显示的行,最少两行。删除缩进并最多插入两个空格
[...]
除非有尾随空格或下一行以')'开头,否则这些命令(“ gJ”除外)将在空格处插入一个空格。
因此,在某些情况下,会插入一个以上的空格或不插入任何空格。据我所知,没有简单的方法可以改变这种行为。我创建了一个函数来修改gJ
为始终加入空格:
" Like gJ, but always remove spaces
fun! JoinSpaceless()
execute 'normal gJ'
" Character under cursor is whitespace?
if matchstr(getline('.'), '\%' . col('.') . 'c.') =~ '\s'
" When remove it!
execute 'normal dw'
endif
endfun
" Map it to a key
nnoremap <Leader>J :call JoinSpaceless()<CR>
另请参阅::help J
,:help 'joinspaces'
选择要合并的行,在正常模式下通过键入冒号输入一个Ex命令:
。然后键入以下命令:
s/$\n\s*//gc
整个命令应如下所示:
:'<,'>s/$\n\s*//gc
这实际上是@insidepower命令的经过调整的版本,该命令替换了空格和换行符。
说明:
'<,'>
意味着我们只修改在可视模式下选择的线。
/$\n\s*
是正则表达式模式。我们正在寻找以$
换行符结尾且此后\n
具有不确定数量的空格的匹配项*
。
s/pattern//gc
是替代命令,用于查找每个模式并在确认时将其替换为空字符。
要了解有关Vim中正则表达式的标志和元字符的更多信息,请参阅《 Vim参考》这一章。