用于连接行的标准J命令用空格替换换行符。编辑“文学”时非常有用,但是如果我忘了删除多余的空间,如果我手动编辑一个十六进制转储,可能会很麻烦。它们之间没有空格?

#1 楼

gJ映射可完成此操作;从:help gJ开始:


连接[count]行,最少两行。请勿插入或删除任何空格。


如果要保存击键,可以将其重新绑定到J:删除任何空格,因此,如果当前行以空格结尾或下一行以一个或多个空格开头,则它们将保留原样;所以这样:

:nnoremap J gJ


成为:

Hello
    world


在这种情况下我们可以使用Jx,那么它将是Helloworld,但并非在所有情况下都有效;来自帮助:


连接突出显示的行,最少两行。删除缩进并最多插入两个
空格

[...]

这些命令,除“ gJ”外,在除非
末尾有空格,或者下一行以')'开始。据我所知
,没有简单的方法可以改变这种行为。我创建了一个函数
修改gJ,使其始终不带空格地联接:为了防止光标移动而在末尾添加了let save = winsaveview()(但当前行为与call winrestview(save)相同)。

评论


使用此功能时是否可以使用某些“保留”功能保持光标位置,或者如何获得此结果?

– SergioAraujo
17年12月15日在12:19

很晚才回复@SergioAraujo,但是是的,您可以在开始时使用let save = winsavesave(),在结束时使用winrestview(save)。

–马丁·图尔诺伊(Martin Tournoij)
20-4-11的11:33

#2 楼

您可以尝试的另一种技巧是使用replace。有时这可能有用。

%s/$\n//g


方案:删除最后一个字符并与下一行结合: br />例如

%s/=$\n\(.\)//g


成为:

xxxx=
123


#3 楼

创建一个宏并重用它:

qaJxq

现在,如果要在没有空格的情况下连接两行,请使用@a重播该宏a

@@将重复上一个宏。因此,您只需按住@即可加入多行。

评论


为什么可以键入Jx时键入@a?按键和SHIFT按键的数量相同!

– Shahbaz
17年1月19日在1:37

@Shahbaz也许是因为最后一行:“您可以按住@”

–muru
17年1月19日,下午3:13

@muru,没错!

– Shahbaz
17年1月19日在15:23

它还使它成为可重复的命令,因此您可以使用3 @ a连接3行,而执行3Jx则将3行与空格连接,然后删除第二行和第三行之间的空格,而在其他行之间保留空格。

–海因
17-2-27在18:05



#4 楼

始终以单个空格连接: br />

评论


欢迎光临本站!您的映射对我来说似乎有点过分设计,如果您可以添加一些更多关于它们如何工作的说明,将会很有帮助。

–statox♦
19年4月9日在15:31

#5 楼

选择要合并的行,在正常模式下通过输入冒号:输入一个Ex命令。然后键入以下命令:

s/$\n\s*//gc

整个命令应类似于:

:'<,'>s/$\n\s*//gc


这实际上是@insidepower命令的经过调整的版本,它替换了空格缩进和换行符。


解释:


我们只修改在可视模式下选择的行。
'<,'>是正则表达式模式。我们正在寻找一个以换行符/$\n\s*结尾并在其后具有不确定数量的空格$的匹配项。


要了解有关Vim中正则表达式的标志和元字符的更多信息,请查看《 Vim参考》这一章。


评论


大家好,欢迎来到Vi和Vim!您在那里有一个写得很好的答案。对此表示敬意。我的一个提要是vim正则表达式= / = python正则表达式,有时这会使用户感到困惑。也许链接到Vim regex的帮助文档?

– D. Ben Knoble♦
19-10-8的2:07

第二点:您引用的答案由@insidepower编写,由Peter编辑。

– D. Ben Knoble♦
19-10-8的2:08