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

pdsfdshx  于 2023-06-30  发布在  其他
关注(0)|答案(9)|浏览(168)

是否可以在vi或Vim中显示/隐藏所有匹配行?不突出显示,只显示这些行。
例如,我有一个文字的文字ERROR。如何让它只显示包含ERROR的行,以及如何只显示不包含ERROR的行?
有没有一个解决方案 * 不删除 * 所有匹配的行,然后只是撤消它?

vs91vp4v

vs91vp4v1#

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

:g/ERROR

相反的是:

:g!/Error

或等同地:

:v/Error
j2cgzkjk

j2cgzkjk2#

根据您的用例,另一种方法是使用vimgrep及其在quickfix中的结果。您可以执行以下操作:
:vimgrep pattern %将搜索当前文件并将您带到第一个搜索结果。更重要的是,它还将结果放在“快速修复列表”中。
然后:copen将在一个单独的快速修复窗口中打开快速修复列表。因此,您将有一个单独的窗口,其中包含上一个vimgrep中的所有行。在快速修复窗口中,您可以按Enter键或双击一行跳转到原始文件中的相应行。
:colder会让你回到旧的quickfix列表(旧的vimgrep结果)。而:cnewer会前进到更新的搜索结果。
请注意,quickfix列表在运行:make时也会更新(这就是为什么它被称为quickfix来修复错误)。正因为如此,还有一个替代的快速修复列表称为“位置列表”。要使用它,您可以使用:lvimgrep,然后使用l前缀命令而不是c前缀命令-:lopen:lolder:lnewer
当然,你可以做的还有很多。请参阅:help quickfix了解更多信息。
PS,你说你不想要一种删除行然后撤消它们的方法。但是既然你把g/ERROR标记为答案,我想我会指出一个快速而肮脏的方法是做g!/ERROR/d。然后,您可以使用u轻松地撤消它。另外供参考,您可以执行:set hlsearch来突出显示与:g命令匹配的模式。

siv3szwd

siv3szwd3#

你可以用

:g/ERROR/

打印所有包含ERROR的行
还有一个Vim插件,我看过很多次,但没有用途:foldsearch : fold away lines that don't match a given pattern

inb24sb2

inb24sb24#

最好的方法是->

:vimgrep /something/g % | copen

这将打开您的关键字匹配的列表,也将只显示在quickfix窗口匹配的行。
如果不考虑当前文件,请将%替换为文件路径。

h4cxqtbf

h4cxqtbf5#

:vimgrep /something/g % | copen工作得很棒。也可以使用:g/<pattern>/d删除具有模式的行

dgjrabp2

dgjrabp26#

如果你碰巧使用fzf,你可以用途:

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

5tmbdcev7#

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

ppcbkaq5

ppcbkaq58#

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

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

gcxthw6b9#

你就可以

:g!/<pattern>/d

相关问题