是否可以在 vi 或 Vim 中显示/隐藏所有匹配行?不突出显示,只显示那些行。
例如,我有一段文字,其中包含“
ERROR
”一词。如何使其仅显示包含 ERROR
的行以及如何仅显示不带 ERROR
的行?
有没有解决方案不删除所有匹配行然后撤消它?
你知道
:global
命令吗?这符合你的要求吗?
:g/ERROR
相反:
:g!/Error
或等价:
:v/Error
根据您的用例,另一种方法是使用 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
命令匹配的模式。
最好的方法是->
:vimgrep /something/g % | copen
这将打开您的关键字的匹配列表,并且还将在快速修复窗口中仅显示匹配的行。
如果不考虑当前文件,请将 % 替换为文件路径。
:vimgrep /something/g % | copen
效果很棒。 :g/<pattern>/d
也可用于删除带有图案的线条
如果您碰巧使用fzf,您可以使用:
:Lines
在所有打开的文件中:BLines
仅在开放缓冲区中:Rg [pattern]
使用ripgrep
你可能指的是 less vi vim 中的命令 & /图案/ 它显示包含 /pattern/ 的行(如 grep)。
一些黑客肮脏的方法来做到这一点:
:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)
那么你就可以做
:g!/<pattern>/d