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

Ale*_*tov 84 vi vim

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

例如,我有一个单词的文字ERROR.如何让它只显示包含的行ERROR以及如何仅显示没有的行ERROR

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

use*_*400 101

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

:g/ERROR
Run Code Online (Sandbox Code Playgroud)

并为相反的:

:g!/Error
Run Code Online (Sandbox Code Playgroud)

或等效地:

:v/Error
Run Code Online (Sandbox Code Playgroud)

  • 这不是很好.滚动到底部后,命令结束,所有内容再次显示.它并没有真正隐藏这些内容. (18认同)
  • 你可以删除 :v/Error /d 来恢复撤消“u” (2认同)

stu*_*eek 52

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

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

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

:colder将让你回到旧的quickfix列表(较旧的vimgrep结果).并:cnewer转向更新的搜索结果.

请注意,quickfix列表在运行时也会更新:make(这就是为什么它被称为修复错误的quickfix).因此,还有一个名为"位置列表"的quickfix列表的替代品.要使用它,而不是你用:lvimgrep,然后用1-前缀的命令,而不是C-前缀的命令- ,:lopen,.:lolder:lnewer

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

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


Myk*_*yev 37

您可以使用

:g/ERROR/
Run Code Online (Sandbox Code Playgroud)

用ERROR打印所有行

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

  • +1表示foldsearch插件的链接.它不引人注目,可以派上用场. (14认同)

Shi*_*dra 24

最好的方法是 - >

:vimgrep /something/g % | copen
Run Code Online (Sandbox Code Playgroud)

这将打开关键字的匹配列表,并且仅在quickfix窗口中显示匹配的行.