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

问题描述 投票:0回答:9

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

例如,我有一段文字,其中包含“

ERROR
”一词。如何使其仅显示包含
ERROR
的行以及如何仅显示不带
ERROR
的行?

有没有解决方案不删除所有匹配行然后撤消它?

vim vi
9个回答
117
投票

你知道

:global
命令吗?这符合你的要求吗?

:g/ERROR

相反:

:g!/Error

或等价:

:v/Error

55
投票

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

:vimgrep pattern %
将搜索当前文件并带您到第一个搜索结果。更重要的是,它还将结果放入“快速修复列表”中。

然后,

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

:colder
会让您返回到旧的快速修复列表(旧的 vimgrep 结果)。并且
:cnewer
会转到更新的搜索结果。

请注意,运行时

:make
也会更新快速修复列表(这就是为什么它被称为修复错误的快速修复)。因此,还有一个快速修复列表的替代项,称为“位置列表”。要使用它,您可以使用
:lvimgrep
,然后使用 l 前缀命令而不是 c 前缀命令 -
:lopen
:lolder
:lnewer

当然,您可以做的还有很多。请参阅

:help quickfix
了解更多信息。

PS,您说过您不想要一种删除行然后撤消它们的方法。但既然你将

g/ERROR
标记为答案,我想我会指出一个快速而肮脏的方法是做
g!/ERROR/d
。然后您可以使用
u
轻松撤消它。另外仅供参考,您可以执行
:set hlsearch
来突出显示与
:g
命令匹配的模式。


41
投票

你可以使用

:g/ERROR/

打印所有有错误的行

还有一个 Vim 插件我见过很多次但没有使用: foldsearch:折叠掉与给定模式不匹配的行


31
投票

最好的方法是->

:vimgrep /something/g % | copen

这将打开您的关键字的匹配列表,并且还将在快速修复窗口中仅显示匹配的行。

如果不考虑当前文件,请将 % 替换为文件路径。


3
投票

:vimgrep /something/g % | copen
效果很棒。
:g/<pattern>/d
也可用于删除带有图案的线条


3
投票

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

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

1
投票

你可能指的是 less vi vim 中的命令 & /图案/ 它显示包含 /pattern/ 的行(如 grep)。


0
投票

一些黑客肮脏的方法来做到这一点:

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

0
投票

那么你就可以做

:g!/<pattern>/d
© www.soinside.com 2019 - 2024. All rights reserved.