일치하는 줄 전후에 n 줄의 범위를 삭제 하시겠습니까?


12

반복적 인 구성 파일이 있고 정규식을 일치시키고 일치 전후에 줄 범위를 삭제하고 싶습니다. 하나의 명령으로 일치 항목을 삭제하고 싶습니다.

사용할 수 있습니다 ...

:g/match/-1d

... 일치하기 전에 여러 줄을 삭제하는 경우가 많습니다 ...

... 그리고 그것을 몇 번의 호출로 결합하십시오 ...

:g/match/+1d

... 경기 후 둘 이상의 줄을 삭제하려면 ...

그러나 하나의 명령으로 일치하기 전, 후에 그리고 포함하여 여러 줄을 삭제할 수있는 방법이 있습니까?

답변:


21

거의 다 왔습니다. (지금 사용하는 것처럼) [line1],[line2][command]대신에 범위의 행 범위를 지정할 수도 있습니다 [line][command].

.현재 줄을 참조하는 데 사용할 수 있습니다 .

  • 현재 및 다음 줄 : :g/match/.,+1d
  • 현재 및 이전 줄의 경우 : :g/match/-1,.d
  • 이전, 현재 및 다음 줄 : :g/match/-1,+1d

자세한 내용 :help [range]을 보려면 이 답변에 몇 가지 예가 더 있습니다 .


sed에서 구문이 동일합니까?
leeand00

3
@ leeand00 아니요 :g. 패턴과 일치하는 줄에서 ex 명령을 실행하면됩니다. 타이핑 :g/match/.,+1d은을 사용하여 모든 행으로 이동 match하고 타이핑 하는 것과 정확히 동일합니다.:.,+1d
Martin Tournoij

이것은 내가 vim에서 한동안 배운 가장 멋진 것입니다. 공유해 주셔서 감사합니다!
lps
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.