【问题标题】:Hide all (not)matching lines in Vim在 Vim 中隐藏所有(不)匹配的行
【发布时间】:2010-10-26 03:58:54
【问题描述】:

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

例如,我有一个带有单词ERROR 的文本。如何使其仅显示包含 ERROR 的行以及如何仅显示不包含 ERROR 的行?

有没有解决方案不删除所有匹配的行然后直接撤消它?

【问题讨论】:

标签: vim vi


【解决方案1】:

你可以使用

:g/ERROR/

打印所有错误的行

还有一个我看过很多次但没有使用的 Vim 插件: foldsearch : fold away lines that don't match a given pattern

【讨论】:

  • +1 表示折叠搜索插件的链接。它不显眼,可以派上用场。
【解决方案2】:

你知道:global 命令吗?这符合您的要求吗?

:g/ERROR

反之:

:g!/Error

或等效:

:v/Error

【讨论】:

  • 这不是很好。一旦滚动到底部,命令就会结束,一切都会再次出现。它并没有真正隐藏这些内容。
  • @KanLi 点击g< 再次查看,或者@: 如果你还没有运行和命令。
  • 你可以删除 :v/Error /d 来取回 undo "u"
  • 是否可以在:g/pattern/ 之后的“过滤窗口”中保留原始缓冲区中的语法高亮?
【解决方案3】:

根据您的用例,另一种方法是使用 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 命令匹配的模式。

【讨论】:

  • 感谢关于“:g!/ERROR/d”的提示比接受的答案更好。
  • 你能用 not 匹配模式的行来做到这一点吗?
【解决方案4】:

你可能是指在 less vi vim 中的命令 & /图案/ 显示包含 /pattern/ 的行(如 grep)。

【讨论】:

    【解决方案5】:

    最好的方法是->

    :vimgrep /something/g % | copen
    

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

    如果不考虑当前文件,则将 % 替换为文件路径。

    【讨论】:

    • 如果不考虑当前文件,请将 % 替换为文件路径。
    • 你能用 not 匹配模式的行来做到这一点吗?
    【解决方案6】:

    :vimgrep /something/g % | copen 非常棒。也可以使用:g/<pattern>/d 删除带有模式的行

    【讨论】:

    • 这正是这个问题的另一个答案。
    【解决方案7】:

    如果你碰巧使用fzf,你可以使用:

    • :Lines 在所有打开的文件中
    • :BLines 仅在开放缓冲区中
    • :Rg [pattern] 使用 ripgrep

    【讨论】:

      【解决方案8】:

      一些肮脏的方式来做到这一点:

      :w (save)
      ggdG (deletes everything)
      :.!grep something % (replace current line with grep output)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        相关资源
        最近更新 更多