作为我的一个项目的一部分,我正在尝试将某些行从文件移动到顶部,并以某种方式排序。一旦这些行在上面,我不确定如何进行排序-我不想干扰文件中的其他行。
我把它们拽出来放回原处,就像这样:
g:/pattern/yank A
g:/pattern/d
0put A这会根据需要将我指定的所有行移到文件的顶部,但现在我需要根据模式对它们进行排序,如下所示:
[range]sort r /pattern2/有没有办法在粘贴之前对寄存器的内容进行排序?或者只对与/pattern/匹配的行进行排序?(当然,因为所有被拉动的线路都会)。
我受阻了,如果能帮上忙,我会很感激。
编辑-一种可能的解决方法可能是在被拖拽之前计算行数,然后在再次放置这些行时使用它来选择和排序这些行。我不确定如何计算这些行-我可以使用命令%s/ pattern //n打印与模式匹配的行数,但我不能用这个数字做任何事情,也不能在函数中使用这个数字。
发布于 2018-03-09 04:11:35
:g/pattern/cmd的主要目的是在与pattern匹配的每一行上执行cmd。当然,cmd可以是:sort。
使用与您相同的方式:
:g/pattern/yank A要将与pattern匹配的每一行都附加到寄存器a中,请执行以下操作:
:g/pattern/d要删除与pattern匹配的每一行,您可以执行以下操作:
:g/pattern/sort r /pattern2/对pattern2上与pattern匹配的每一行进行排序。
不管怎么说,你的例子是浪费的。您可以简单地这样做,而不是使用三个命令来滥用寄存器:
:g/pattern/m0要在使用排序之前将匹配pattern的每一行移动到缓冲区的顶部,请执行以下操作:
:g//sort r /pattern2/参见:help :global、:help :sort、:help :move。
https://stackoverflow.com/questions/49181011
复制相似问题