vim: 이웃 라인에 없는 패턴을 포함하는 라인을 찾습니다.

vim: 이웃 라인에 없는 패턴을 포함하는 라인을 찾습니다.

특정 패턴이 포함된 모든 줄을 표시하는 방법을 찾고 싶지만 이웃(이전, 다음) 줄은 표시되지 않습니다.

예: 패턴이 "PATTERN"이라는 단어라고 가정해 보겠습니다.

1.#########################

2.#########패턴#########

삼.##############################

그러면 두 번째 줄이 유효하고 표시됩니다.

하지만

1.#########################

2.#########패턴#########

3.#########패턴#########

4.#############################

두 번째와 세 번째 줄은 유효하지 않으므로 표시되지 않습니다.

답변1

다음과 같이 정규식 캡처 그룹을 사용하고 싶을 것입니다.

/\v%(PATTERN.*\n.*)@<!(PATTERN)%(.*\n.*\1)@!

예

무섭게 보일 수도 있지만 실제로는 매우 간단합니다.

  1. \v활성화하는 데 사용됩니다."아주 마법같아"정규식(대부분의 특수 문자에 백슬래시 사용 방지)
  2. PATTERN.*\n.*is PATTERN, 그 뒤에 아무 것, 개행 문자, 그리고 다시 아무 것도 옵니다.
  3. (...)@<!부정적인 뒤돌아보기의 패턴입니다. 이는 우리가원하지 않는다존재하는 중괄호 사이에 무엇이 있습니까? 따라서 우리의 경우 모든 단계가 2존재해서는 안 됩니다.
  4. (PATTERN)이것이 우리의 실제 단어입니다. 이것이 존재해야 합니다! 향후 사용을 위해 중괄호로 캡처합니다.
  5. .*\n.*\1무엇이든, 개행 문자, 다시 무엇이든, 캡처된 그룹(단계 참조 4)
  6. %(...)@!이전과 마찬가지로 부정적인 예측이므로 중괄호 사이에 있는 내용이 존재하는 것을 원하지 않습니다.

따라서 기본적으로 우리는 PATTERN다음을 원합니다.

  • 다음을 포함하는 줄이 앞에 오지 않음PATTERN
  • 다음을 포함하는 줄이 성공하지 못했습니다.PATTERN

관련 정보