2010-06-23 4 views
19

가끔은 Windows에서 다양한 로그 및 추적 파일을 조사해야하며 일반적으로 VIM 용도로 사용합니다. 는 A 라인 버퍼 하지 일치 지정된 정규 표현에서 찾을 :하지만VIM에서 일치하지 않는 첫 번째 라인 찾기

내 문제는 내가 아직 VIM의 내부의 아날로그에게 grep -v을 찾을 수 있다는 것입니다. 예 : 로그 파일은 어딘가에 중간에 어구 all is ok이 들어있는 줄로 채워져 있고 all is ok을 포함하지 않는 첫 줄을 찾아야합니다.

사용자 정의 함수를 작성할 수 있지만 아직 과도한 것으로 보이고 기본 솔루션보다 느릴 수 있습니다.

VIM에서 쉽게 수행 할 수있는 방법이 있습니까?

:%g!/search/p 

이는 ... 그 일 있는지 확실하지 않습니다, 그러나 그것은과 일치하지 않는 행을 끝낼 않았다을 인쇄 말한다 :

답변

13

당신은 부정적인 모습 숨김 운영자 @<!

예를 들어, 사용할 수 있습니다 (물론, "검색"에 대한 몇 가지 다른 문자열로 대체) /\v^.+(^.*a.*$)@<!$

사용, "A"를 포함하는 모든 라인하지를 찾기 위해 (\v 단지 원인 (@<! 같은 일부 사업자 된 백 슬래시 이스케이프해야합니다하지 말 것) 간단한 방법은 모든 라인이 일치하거나 일치하지 않는 삭제하는 것입니다

패턴 (:g/PATTERN/d 또는 각각 :g!/PATTERN/d)

+0

'/^.\+\(^.*all은 괜찮습니다. * $ \) \ @ Dummy00001

+0

': g!/PATTERN/p'는 너무 많은 출력을 생성합니다. 옵션이 아닌 몇 백만 mln 라인 파일. ': g!/PATTERN/d'는 매우 유용합니다. stdin에서 읽은 버퍼로 작업하고 아직 파일에 저장하지 않았습니다. – Dummy00001

+0

음 ... 필자의 경우에': g!/PATTERN/d'는 분명히': g/PATTERN/d'로 쓰여 져야한다. - 관심없는 선을 없애기 위해서. – Dummy00001

2

는 그냥 "g"명령을 사용하여 다소 klutzy 절차를 관리 커서가 첫 번째 일치하지 않는 행에 있습니다.

+2

': v'는 당연히': g! '와 동의어입니다. – Cascabel

+0

@ Jefromi : 고맙습니다. 나는': v'에 대해 잊어 버렸습니다. –

5

나는 "깨끗한"로그 파일에, 그래서 내가 사용, 귀하의 경우 자주 해요 :

:g/all is ok/d 
,

귀하의 grep -v하지오류를 포함하지 모든 행을 제거합니다

:v/error/d 

으로 달성 될 수있다.

19

첫 번째로 일치하지 않는 줄에 커서를 올려 놓고 싶으면 전역 명령에서 visual을 명령으로 사용할 수 있습니다. 따라서 :

:v/pattern/visual 

첫 번째 일치하지 않는 행에 커서를 놓습니다. 또는 :

:g/pattern/visual 

첫 번째 일치하는 줄에 커서를 놓습니다.

+1

시각적 명령을 vi로 줄이면 ... 할 수 있습니다. v/pattern/vi –

+0

이것은 분명히 가장 좋은 대답입니다. 왜 그것을 선택하지 않았다!? – histumness

+3

파일의 처음부터 시작하여 현재 커서 위치에서 시작하지 않는 첫 번째 일치하지 않는 행을 찾습니다. 커서 위치에서 검색하려면':., $ v/pattern/vi'를 사용하십시오. –

3

아마도 이미 너무 늦었 겠지만 어딘가에 있어야한다고 생각합니다.

Vim (이후 버전 약 7.4)에는 LogiPat이라는 플러그인이있어 일부 문자열을 포함하지 않는 행을 검색하기가 쉽습니다.

:LogiPat !"all is ok" 

을 그리고 당신은 일치하는 사이에 이동 (또는이 경우가 일치하지 않는)에 nN와 라인 수 : 그래서 all is ok를 포함하는 것은 다음과 같이 수행하지 라인을 찾는이 플러그인을 사용하여.

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

LPLogiPat의 약어이며,이 명령은 단어 baz '과'돈 '을 포함하는 행을 검색합니다 :

또한 하나 개의 패턴에 다른 문자열을 가입 &| 같은 논리 연산을 사용할 수 있습니다 t foo 또는 bar을 포함하지 마십시오.

관련 문제