簡體   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