繁体   English   中英

在VIM中找到第一个不匹配的行

[英]Find first non-matching line in VIM

有时候我必须在Windows上查看各种日志和跟踪文件,通常我会将其用于VIM。

我的问题是我仍然无法在VIM中找到grep -v任何模拟 :在缓冲区中找到与给定正则表达式匹配的行。 例如,日志文件中填充了中间某处包含短语的行, all is ok ,我需要查找不包含all is ok第一行all is ok

我可以为此编写一个自定义函数,但此刻似乎是一种矫枉过正,可能比本机解决方案慢。

在VIM中有什么简单的方法吗?

我相信如果你只想让你的光标在第一个不匹配的行上结束,你可以在全局命令中使用visual作为命令。 所以:

:v/pattern/visual

将光标留在第一个不匹配的行。 要么:

:g/pattern/visual

将光标留在第一个匹配的行。

你可以使用负面的后视操作员@<!

例如,要找到所有不包含“a”的行,请使用/\\v^.+(^.*a.*$)@<!$

\\v只会导致一些运算符(@<!不一定是反斜杠转义)

更简单的方法是删除所有匹配或不匹配模式的行(分别为:g/PATTERN/d:g!/PATTERN/d

我经常在你的情况下,所以要“清理”我使用的日志文件:

:g/all is ok/d

你的grep -v可以实现

:v/error/d

这将删除所有包含错误的行

这可能已经太晚了,但我认为应该在某处说。

Vim(自版本约7.4)附带一个名为LogiPat的插件,它可以很容易地搜索不包含某些字符串的行。 因此,使用此插件查找不包含all is ok的行all is ok的,如下所示:

:LogiPat !"all is ok"

然后你可以在匹配(或在这种情况下不匹配)的行与nN之间跳转。

您还可以使用&|类的逻辑运算 在一个模式中连接不同的字符串:

:LP !("foo"|"bar")&"baz"

LPLogiPat简写,此命令将搜索包含单词baz行,并且不包含foobar

我只是使用“g”命令管理了一个有点klutzy的过程:

:%g!/search/p

这表示打印出不匹配的行...不确定是否有效,但最终光标位于第一个不匹配的行上。

(当然,用其他字符串代替“搜索”)

您可以使用g和null替换迭代不匹配:

:g!/pattern/s/^//c

如果你每次回复“n”,你甚至不会将文件标记为已更改。

你需要ctrl-C从圆圈中逃脱(或者继续到文件底部)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM