如何在vim中基于搜索模式可视化选择行?

6

我有一个大文件中到处都是一些方法调用,我希望能匹配这些行,选择并将它们作为一个整体粘贴到一个地方以便将它们放在单独的位置。

我可以使用:g/>set找到所有想要的行,但如何视觉上选择每一行呢?

2个回答

7

在 Vim 中,您不能有多个可视化选择。

但是,您可以清除一个寄存器并将所有匹配的行附加到它上:

:let @a = ''
:g/>set/y A

然后创建一个空缓冲区(或导航到现有的缓冲区):

:vnew

从寄存器a中复制并粘贴:
"ap

但你可能需要像TagListTagBar这样的东西。
:[something]y a

意思是“将文本复制到寄存器a中”。
:[something]y A

意思是“将内容附加到寄存器a中”。

太棒了!正是我想要的。谢谢 :) - Sam Giles
那里的大写字母A代表什么?它是表示追加(append)吗?还是表示追加到寄存器a中?同样地,对于:g/>set/y B,是否也是为寄存器b进行追加操作? - Xavier T.
@XavierT.,它的意思是“将a附加到寄存器”,你关于y B是正确的。 - romainl
1
@romainl:我终于找到了它在:help中提到的位置,但它被很好地隐藏了。(对于任何感兴趣的人,在Vim 7.4中使用:help copy-move - Xavier T.
@XavierT。这也在:h quote_alpha中有解释。 - FDinoff

2

我通常做的是:

  1. 删除没有与模式匹配的所有行::v/pattern/d
  2. ggyG 选择整个新文件
  3. 使用 p 在某处粘贴结果
  4. 使用 u 撤销几次以将文件恢复到其初始状态

这有点繁琐,我希望有一个更简单的解决方案。


如何使用以下命令:1)v/pattern/d 2)%y 3)tabnew 4)P?这样,您将拥有原始文件的完整副本,以及一个可以“搞砸”(排序、过滤、重命名等)的文件。 - ThG
想一想,也许还有另一种方法(YMMV):简单折叠。请查看我的问题(SO 18547179)和eleom提供的非常高效的答案。 - ThG

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