是否可以在 vi 或 Vim 中显示/隐藏所有匹配的行?不突出显示,只显示那些行。
例如,我有一个带有 word the word 的文本ERROR
。如何使其仅显示包含的行ERROR
以及如何仅显示不包含的行ERROR
?
有没有删除所有匹配行然后撤消它的解决方案?
你知道:global
命令吗?这是做你想做的吗?
:g/ERROR
相反:
:g!/Error
或等效地:
:v/Error
根据您的用例,另一种方法是使用vimgrep及其结果在quickfix。您可以执行以下操作:
:vimgrep pattern %
将搜索当前文件并将您带到第一个搜索结果。更重要的是,它还将结果放在“快速修复列表”中。
:copen
然后将在单独的快速修复窗口中打开快速修复列表。因此,您将有一个单独的窗口,其中包含上次 vimgrep 中的所有行。在快速修复窗口中,您可以按 Enter 或双击一行以跳转到原始文件中的相应行。
:colder
会让你回到旧的 quickfix 列表(旧的 vimgrep 结果)。并:cnewer
前进到更新的搜索结果。
请注意,quickfix 列表在运行时也会更新:make
(这就是为什么它被称为 quickfix 来修复错误)。正因为如此,quickfix 列表还有一个替代品,称为“位置列表”。要使用它,请使用: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
一些hackish肮脏的方式来做到这一点:
:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)
您可能指的是 less vi vim & /pattern/ 中的命令,它显示包含 /pattern/ 的行(如 grep)。