是否可以在vi或Vim中显示/隐藏所有匹配的行?不突出显示,只显示那些行。
例如,我的文字单词ERROR
。如何仅显示包含ERROR
的行以及如何仅显示没有ERROR
的行?
是否有解决方案不删除所有匹配的行,然后撤消它?
答案 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