패턴을 포함하지만 두 번째 패턴을 포함하지 않는 라인 검색


15

단어가 있지만 두 번째 단어는 포함 하지 않는 행을 검색해야합니다 .

예를 들어 "This"라는 단어는 포함하고 "red"는 포함하지 않는 행을 찾으십시오.

이 줄을 포함하는 파일의 경우

This is a blue coat
This is a red  coat
This is a purple coat
That is a coat

검색은 첫 번째와 세 번째 행만 찾습니다.

조언을 주셔서 감사합니다!


최신 Vims
Christian Brabandt

답변:


23

이 명령을 사용하여 다음을 포함 This하지 않는 행을 인쇄 할 수 있습니다 red.

:g/\(.*This\)\&\(.*red\)\@!
  • \&AND두 조건 (분기)을 만족하는 선을 원하기 때문에 분기를 논리적으로 분리합니다 .
  • \(.*This\)첫 번째 브랜치입니다. 간단 할 수는 This있지만 더 일반적입니다.
  • \(.*red\)\@!는 두 번째 분기로, \@!논리와 같이 "앞의 원자가 일치하지 않으면 너비가 0이되지 않음"을 의미 NOT합니다.

다시 말해:

\(.*This\)  \&  \(.*red\)\@!
°°°°°°°°°°  °°  °°°°°°°°°°°°
'This'      AND NOT 'red'

감사합니다. 이것은 형식화 된 텍스트를 통한 쿼리와 매우 유사합니다. 이것을 사용하여 누락 된 docstrings 함수를 찾을 수있었습니다.
Joshua Detwiler

1

이 게시물을 살펴보십시오.

@romainl 답변과 결합하면 원하는대로 할 수 있습니다.

예 : const함수가없는 함수 에 a 를 추가하고 싶다고합시다 .

    handleChange = value => {

VIM 스크립트 :

%s/\([ ]*\)\(\w* = .*$\)\&^\(\&\(.*const.*\)\@!.\)*$/\1const \2/gc

산출:

    const handleChange = value => {

설명:

\([ ]*\)\(\w* = .*$\)

-가지고있는 모든 줄을 가져와 word =

\&

-규칙 결합

^\(\&\(.*const.*\)\@!.\)*$

-라인에 포함되어서는 안됩니다 const.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.