有时候我必须在Windows上查看各种日志和跟踪文件,通常我会将其用于VIM.
我的问题是,虽然我仍然找不到任何模拟的grep -v
VIM里面:寻找缓冲区行不匹配给定的正则表达式.例如,日志文件中填充了中间某处包含短语的行all is ok
,我需要查找不包含的第一行all is ok
.
我可以为此编写一个自定义函数,但此刻似乎是一种矫枉过正,可能比本机解决方案慢.
在VIM中有什么简单的方法吗?
Neg*_*_EV 22
我相信如果你只想让你的光标在第一个不匹配的行上结束,你可以在全局命令中使用visual作为命令.所以:
:v/pattern/visual
Run Code Online (Sandbox Code Playgroud)
将光标留在第一个不匹配的行.要么:
:g/pattern/visual
Run Code Online (Sandbox Code Playgroud)
将光标留在第一个匹配的行.
myk*_*hal 16
你可以使用负面的后视操作员 @<!
例如,要找到所有不包含"a"的行,请使用 /\v^.+(^.*a.*$)@<!$
(\v
只是导致一些运营商喜欢(
而@<!
不是必须反斜杠转义)
更简单的方法是删除匹配或不匹配模式的所有行(:g/PATTERN/d
或:g!/PATTERN/d
分别)
我经常在你的情况下,所以要"清理"我使用的日志文件:
:g/all is ok/d
Run Code Online (Sandbox Code Playgroud)
你grep -v
可以实现
:v/error/d
Run Code Online (Sandbox Code Playgroud)
这将删除所有不包含错误的行.
可能已经为时已晚,但是我认为这应该在某个地方说。
Vim(大约从7.4版本开始)带有一个名为LogiPat的插件,这使查找不包含某些字符串的行变得非常容易。因此,使用此插件查找不包含的行all is ok
是这样完成的:
:LogiPat !"all is ok"
Run Code Online (Sandbox Code Playgroud)
然后你就可以匹配之间跳转(或在这种情况下不匹配),用线n
和N
。
您还可以使用逻辑运算符(例如&
和)|
在一个模式中连接不同的字符串:
:LP !("foo"|"bar")&"baz"
Run Code Online (Sandbox Code Playgroud)
LP
是简写LogiPat
,而这个命令将搜索包含字线baz
,并且不包含既不foo
也没有bar
。
归档时间: |
|
查看次数: |
9576 次 |
最近记录: |