일치하는 줄 전후에 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.