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

隐藏Vim中的所有(非)匹配行,vim,vi,Vim,Vi,是否可以在vi或Vim中显示/隐藏所有匹配行?不高亮显示,只显示那些线条 例如,我有一个带有单词ERROR的文本。如何使其仅显示包含错误的行,以及如何仅显示不包含错误的行 有没有一种解决方案不删除所有匹配的行,然后将其撤消?您可以使用 :g/ERROR/ 打印所有有错误的行 还有一个Vim插件,我看过很多次,但没有使用: 您知道:global命令吗?这是你想要的吗 :g/ERROR 相反地: :g!/Error 或相当于: :v/Error 另一种取决于您的用例的方法是使用vimgrep

是否可以在vi或Vim中显示/隐藏所有匹配行?不高亮显示,只显示那些线条

例如,我有一个带有单词
ERROR
的文本。如何使其仅显示包含
错误的行
,以及如何仅显示不包含
错误的行

有没有一种解决方案不删除所有匹配的行,然后将其撤消?

您可以使用

:g/ERROR/
打印所有有错误的行

还有一个Vim插件,我看过很多次,但没有使用:

您知道
:global
命令吗?这是你想要的吗

:g/ERROR
相反地:

:g!/Error
或相当于:

:v/Error

另一种取决于您的用例的方法是使用vimgrep及其在quickfix中的结果。您可以执行以下操作:

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

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

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

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

当然,你可以做的还有很多。有关更多信息,请参阅
:帮助快速修复


PS,你说过你不想要一种删除行然后撤消行的方法。但是既然你把
g/ERROR
标记为答案,我想我会指出一个快速而肮脏的方法是做
g/错误/d
。然后,您可以使用
u
轻松撤消它。另外,您可以执行
:设置hlsearch
以突出显示与
:g
命令匹配的模式。

您可能指的是使用更少的vi vim命令 &/模式/
显示包含/pattern/(如grep)的行。

最好的方法是->

:vimgrep /something/g % | copen
这将打开关键字的匹配列表,并且在quickfix窗口中仅显示匹配的行


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

:vimgrep/something/g%| copen
非常有效。另外,
:g//d
可用于删除带有模式的行

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

  • :所有打开的文件中的行
  • :仅在打开的缓冲区中显示
  • :Rg[pattern]
    使用
    ripgrep

一些俗不可耐的肮脏方法:

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

+1获取foldsearch插件的链接。它不引人注目,而且可以派上用场。这不是很好。滚动到底部后,命令完成,所有内容再次显示。它并没有真正隐藏这些内容。@KanLi在不考虑当前文件的情况下,用文件路径点击
gReplace%。您能用与模式不匹配的行来执行此操作吗?谢谢关于“:g!/ERROR/d”的提示比公认的答案要好。你能用不符合模式的线条来回答吗?这正是这个问题的另一个答案。