是否可以在vi或Vim中显示/隐藏所有匹配行?不突出显示,只显示这些行。例如,我有一个文字的文字ERROR。如何让它只显示包含ERROR的行,以及如何只显示不包含ERROR的行?有没有一个解决方案 * 不删除 * 所有匹配的行,然后只是撤消它?
ERROR
vs91vp4v1#
你知道:global命令吗?这是你想要的吗?
:global
:g/ERROR
相反的是:
:g!/Error
或等同地:
:v/Error
j2cgzkjk2#
根据您的用例,另一种方法是使用vimgrep及其在quickfix中的结果。您可以执行以下操作::vimgrep pattern %将搜索当前文件并将您带到第一个搜索结果。更重要的是,它还将结果放在“快速修复列表”中。然后:copen将在一个单独的快速修复窗口中打开快速修复列表。因此,您将有一个单独的窗口,其中包含上一个vimgrep中的所有行。在快速修复窗口中,您可以按Enter键或双击一行跳转到原始文件中的相应行。:colder会让你回到旧的quickfix列表(旧的vimgrep结果)。而:cnewer会前进到更新的搜索结果。请注意,quickfix列表在运行:make时也会更新(这就是为什么它被称为quickfix来修复错误)。正因为如此,还有一个替代的快速修复列表称为“位置列表”。要使用它,您可以使用:lvimgrep,然后使用l前缀命令而不是c前缀命令-:lopen,:lolder,:lnewer。当然,你可以做的还有很多。请参阅:help quickfix了解更多信息。PS,你说你不想要一种删除行然后撤消它们的方法。但是既然你把g/ERROR标记为答案,我想我会指出一个快速而肮脏的方法是做g!/ERROR/d。然后,您可以使用u轻松地撤消它。另外供参考,您可以执行:set hlsearch来突出显示与:g命令匹配的模式。
:vimgrep pattern %
:copen
:colder
:cnewer
:make
:lvimgrep
:lopen
:lolder
:lnewer
:help quickfix
g/ERROR
g!/ERROR/d
u
:set hlsearch
:g
siv3szwd3#
你可以用
:g/ERROR/
打印所有包含ERROR的行还有一个Vim插件,我看过很多次,但没有用途:foldsearch : fold away lines that don't match a given pattern
inb24sb24#
最好的方法是->
:vimgrep /something/g % | copen
这将打开您的关键字匹配的列表,也将只显示在quickfix窗口匹配的行。如果不考虑当前文件,请将%替换为文件路径。
h4cxqtbf5#
:vimgrep /something/g % | copen工作得很棒。也可以使用:g/<pattern>/d删除具有模式的行
:g/<pattern>/d
dgjrabp26#
如果你碰巧使用fzf,你可以用途:
fzf
:Lines
:BLines
:Rg [pattern]
ripgrep
5tmbdcev7#
你可能是指在less vi vim & /pattern/中的命令,它显示包含/pattern/的行(像grep)。
ppcbkaq58#
一些黑客肮脏的方式来做到这一点:
:w (save) ggdG (deletes everything) :.!grep something % (replace current line with grep output)
gcxthw6b9#
你就可以
:g!/<pattern>/d
9条答案
按热度按时间vs91vp4v1#
你知道
:global
命令吗?这是你想要的吗?相反的是:
或等同地:
j2cgzkjk2#
根据您的用例,另一种方法是使用vimgrep及其在quickfix中的结果。您可以执行以下操作:
:vimgrep pattern %
将搜索当前文件并将您带到第一个搜索结果。更重要的是,它还将结果放在“快速修复列表”中。然后
:copen
将在一个单独的快速修复窗口中打开快速修复列表。因此,您将有一个单独的窗口,其中包含上一个vimgrep中的所有行。在快速修复窗口中,您可以按Enter键或双击一行跳转到原始文件中的相应行。:colder
会让你回到旧的quickfix列表(旧的vimgrep结果)。而:cnewer
会前进到更新的搜索结果。请注意,quickfix列表在运行
:make
时也会更新(这就是为什么它被称为quickfix来修复错误)。正因为如此,还有一个替代的快速修复列表称为“位置列表”。要使用它,您可以使用:lvimgrep
,然后使用l前缀命令而不是c前缀命令-:lopen
,:lolder
,:lnewer
。当然,你可以做的还有很多。请参阅
:help quickfix
了解更多信息。PS,你说你不想要一种删除行然后撤消它们的方法。但是既然你把
g/ERROR
标记为答案,我想我会指出一个快速而肮脏的方法是做g!/ERROR/d
。然后,您可以使用u
轻松地撤消它。另外供参考,您可以执行:set hlsearch
来突出显示与:g
命令匹配的模式。siv3szwd3#
你可以用
打印所有包含ERROR的行
还有一个Vim插件,我看过很多次,但没有用途:foldsearch : fold away lines that don't match a given pattern
inb24sb24#
最好的方法是->
这将打开您的关键字匹配的列表,也将只显示在quickfix窗口匹配的行。
如果不考虑当前文件,请将%替换为文件路径。
h4cxqtbf5#
:vimgrep /something/g % | copen
工作得很棒。也可以使用:g/<pattern>/d
删除具有模式的行dgjrabp26#
如果你碰巧使用
fzf
,你可以用途::Lines
在所有打开的文件中:BLines
仅在开放缓冲区中:Rg [pattern]
使用ripgrep
5tmbdcev7#
你可能是指在less vi vim & /pattern/中的命令,它显示包含/pattern/的行(像grep)。
ppcbkaq58#
一些黑客肮脏的方式来做到这一点:
gcxthw6b9#
你就可以