如何在Vim中连接两行并去除不必要的空格

3
Source Insight中,当两行被连接时,额外的空格将会被缩小。例如:
This is line one,<space><space>
<space><space>and this is line two

将加入到:
This is line one,<space>and this is line two

但在Vim中,join命令将会产生:
This is line one,<space><space>and this is line two

我该如何获得与Source Insight相同的结果?


1
稍微挑剔一下:如果你在这两个例子中没有使用两个空格,你就可以看到这些空格来自哪里了... - Karoly Horvath
1个回答

5

很遗憾,您不能使用选项进行配置。它已经被硬编码了,带有尾随空格的行将以这种方式被检测到。通常情况下,尾随空格是不需要的。您可以考虑Vim的想法:"如果存在尾随空白,则可能很重要要保留。否则,它就不应该存在"。因此,下一行将删除前导空格并连接:

hello```
`there

" When joined:
hello```there

hello```
``there

" joined:
hello```there

hello````
`there

" joined
hello````there

您可以通过使用map来改变此行为。这将覆盖您的J键,首先删除尾随空格,然后连接行:

nnoremap J :s/\s*$//<cr>J
vnoremap J :s/\s*$//<cr>gvJ

1
或者只需使用:s/\v\s*\n\s*/ / - Sato Katsura
@SatoKatsura 是的,但这样会排除其他 J 特性,例如考虑 'joinspaces' 选项、'cpo' 中的 j 标志以及 'fo' 中的其他标志。此外,如果我们要追求简短的解决方案,就不需要使用 \v - sidyll
1
呵呵。\v在这里是因为我的第一个版本使用了\s+而不是\s*。 :) - Sato Katsura
这个解决方案会影响多行操作吗? - forrest Jiang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接