#1 楼
gJ
映射可完成此操作;从:help gJ
开始:连接[count]行,最少两行。请勿插入或删除任何空格。
如果要保存击键,可以将其重新绑定到
J
:删除任何空格,因此,如果当前行以空格结尾或下一行以一个或多个空格开头,则它们将保留原样;所以这样::nnoremap J gJ
成为:
Hello
world
在这种情况下我们可以使用
Jx
,那么它将是Helloworld
,但并非在所有情况下都有效;来自帮助:连接突出显示的行,最少两行。删除缩进并最多插入两个
空格
[...]
这些命令,除“ gJ”外,在除非
末尾有空格,或者下一行以')'开始。据我所知
,没有简单的方法可以改变这种行为。我创建了一个函数
修改
gJ
,使其始终不带空格地联接:为了防止光标移动而在末尾添加了let save = winsaveview()
(但当前行为与call winrestview(save)
相同)。#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
评论
使用此功能时是否可以使用某些“保留”功能保持光标位置,或者如何获得此结果?
– SergioAraujo
17年12月15日在12:19
很晚才回复@SergioAraujo,但是是的,您可以在开始时使用let save = winsavesave(),在结束时使用winrestview(save)。
–马丁·图尔诺伊(Martin Tournoij)
20-4-11的11:33