【发布时间】:2010-10-26 03:58:54
【问题描述】:
是否可以在 vi 或 Vim 中显示/隐藏所有匹配的行?不突出显示,只显示那些行。
例如,我有一个带有单词ERROR 的文本。如何使其仅显示包含 ERROR 的行以及如何仅显示不包含 ERROR 的行?
有没有解决方案不删除所有匹配的行然后直接撤消它?
【问题讨论】:
是否可以在 vi 或 Vim 中显示/隐藏所有匹配的行?不突出显示,只显示那些行。
例如,我有一个带有单词ERROR 的文本。如何使其仅显示包含 ERROR 的行以及如何仅显示不包含 ERROR 的行?
有没有解决方案不删除所有匹配的行然后直接撤消它?
【问题讨论】:
你可以使用
:g/ERROR/
打印所有错误的行
还有一个我看过很多次但没有使用的 Vim 插件: foldsearch : fold away lines that don't match a given pattern
【讨论】:
你知道:global 命令吗?这符合您的要求吗?
:g/ERROR
反之:
:g!/Error
或等效:
:v/Error
【讨论】:
g< 再次查看,或者@: 如果你还没有运行和命令。
:g/pattern/ 之后的“过滤窗口”中保留原始缓冲区中的语法高亮?
根据您的用例,另一种方法是使用 vimgrep 及其结果为 quickfix。您可以执行以下操作:
:vimgrep pattern % 将搜索当前文件并将您带到第一个搜索结果。更重要的是,它还将结果放在“快速修复列表”中。
:copen 然后将在单独的快速修复窗口中打开快速修复列表。因此,您将有一个单独的窗口,其中包含上次 vimgrep 中的所有行。在快速修复窗口中,您可以按 Enter 或双击一行以跳转到原始文件中的相应行。
:colder 会让你回到旧的 quickfix 列表(旧的 vimgrep 结果)。而:cnewer 会前进到更新的搜索结果。
请注意,运行:make 时,quickfix 列表也会更新(这就是为什么它被称为 quickfix 来修复错误)。正因为如此,quickfix 列表还有一个替代品,称为“位置列表”。要使用它,请使用 :lvimgrep,然后使用 l 前缀命令而不是 c 前缀命令 - :lopen、:lolder、:lnewer。
当然,您可以做的还有很多。请参阅:help quickfix 了解更多信息。
PS,您说您不想要一种删除行然后撤消它们的方法。但既然你将g/ERROR标记为答案,我想我会指出一个快速而肮脏的方法是做g!/ERROR/d。然后,您可以使用u 轻松撤消它。另外仅供参考,您可以使用:set hlsearch 突出显示与:g 命令匹配的模式。
【讨论】:
你可能是指在 less vi vim 中的命令 & /图案/ 显示包含 /pattern/ 的行(如 grep)。
【讨论】:
最好的方法是->
:vimgrep /something/g % | copen
这将打开您的关键字的匹配列表,并且还将在 quickfix 窗口中仅显示匹配的行。
如果不考虑当前文件,则将 % 替换为文件路径。
【讨论】:
:vimgrep /something/g % | copen 非常棒。也可以使用:g/<pattern>/d 删除带有模式的行
【讨论】:
如果你碰巧使用fzf,你可以使用:
:Lines 在所有打开的文件中:BLines 仅在开放缓冲区中:Rg [pattern] 使用 ripgrep
【讨论】:
一些肮脏的方式来做到这一点:
:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)
【讨论】: