隐藏Vim中的所有(非)匹配行

时间:2009-05-14 12:10:15

标签: vim vi

是否可以在vi或Vim中显示/隐藏所有匹配的行?不突出显示,只显示那些行。

例如,我的文字单词ERROR。如何仅显示包含ERROR的行以及如何仅显示没有ERROR的行?

是否有解决方案不删除所有匹配的行,然后撤消它?

8 个答案:

答案 0 :(得分:95)

你知道:global命令吗?这样做你想要的吗?

:g/ERROR

反之亦然:

:g!/Error

或等效地:

:v/Error

答案 1 :(得分:48)

根据您的使用案例,另一种方法是使用 vimgrep ,其结果为 quickfix 。您可以执行以下操作:

:vimgrep pattern %将搜索当前文件并转到第一个搜索结果。更重要的是,它还将结果放在“quickfix list”中。

然后

:copen将在单独的quickfix窗口中打开quickfix列表。因此,您将拥有一个单独的窗口,其中包含您上一个vimgrep中的所有行。在quickfix窗口中,您可以按Enter键或双击一行以跳转到原始文件中的相应行。

:colder会让你回到旧的quickfix列表(较旧的vimgrep结果)。 :cnewer会转到更新的搜索结果。

请注意,运行:make时也会更新quickfix列表(这就是为什么它被称为修复错误的quickfix)。因此,还有一个名为“位置列表”的quickfix列表的替代品。要使用它而不是:lvimgrep,请使用l-prefixed命令而不是c-prefixed命令 - :lopen:lolder:lnewer

当然,你可以做更多的事情。有关详细信息,请参阅:help quickfix

PS,你说你不想要一种删除行然后撤消它们的方法。但是,由于您将g/ERROR标记为答案,我认为我会指出快速而肮脏的方法是g!/ERROR/d。然后,您可以使用u轻松撤消它。另外,仅供参考,您可以:set hlsearch突出显示与:g命令匹配的模式。

答案 2 :(得分:37)

您可以使用

:g/ERROR/

用ERROR打印所有行

还有一个Vim插件,我看过很多次,但没有使用: foldsearch : fold away lines that don't match a given pattern

答案 3 :(得分:21)

执行此操作的最佳方法是 - >

:vimgrep /something/g % | copen

这将打开您关键字的匹配列表,并且只会在quickfix窗口中显示匹配的行。

答案 4 :(得分:2)

:vimgrep /something/g % | copen很棒。此外,:g/<pattern>/d也可用于删除带有模式的行

答案 5 :(得分:1)

一些骇人听闻的肮脏方式可以做到这一点:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)

答案 6 :(得分:0)

你可能意味着命令少于vi vim     &安培; /图案/ 它显示包含/ pattern /(如grep)的行。

答案 7 :(得分:0)

如果您碰巧使用fzf,可以使用:

  • :Lines在所有打开的文件中
  • :BLines仅在开放缓冲区中
  • :Rg [pattern]使用ripgrep