내 글에 이런 대사가 있다.
패턴 앞의 텍스트 = 쓰레기** 패턴 뒤의 텍스트는 패턴입니다
VIM에서 이 작업을 수행하면 .이후에 발생하는 이벤트만 %s/pattern/saturn/
교체 pattern
하고 싶습니다 =
. 해당 줄 앞에 오는 모든 내용을 무시해야 합니다 =
. 어떻게 하나요?
답변1
pattern
before가 한 번만 나타난다고 가정하면 다음 =
두 단계로 이 작업을 수행할 수 있습니다.
:%s/pattern/saturn/g
:%s/saturn\(.\{-}=\)/pattern\1/
게으른 일치(비탐욕적 일치라고도 함)를 나타냅니다 \{-}
..
설명하다
첫 번째 단계에서는 모든 항목을 다음 단계 pattern
로 바꾼 다음 이전 단어를 찾아 로 바꿉니다 .saturn
saturn
=
pattern
경고하다
=
이는 각 행이 한 번만 나타나는 것으로 가정합니다.
=
더 나은 방법( 행당 하나씩 가정 )
재귀 매크로를 사용하여 이 작업을 수행할 수 있습니다.
qaqqa:%s/\(=.\{-}\)pattern/\1saturn/@aq@a
이는 단일 발생 pattern
이후 를 =
로 대체합니다 saturn
. 매크로로 저장되고 재귀적으로 호출되면 대체할 항목이 남지 않을 때까지 파일 처리를 계속합니다. 꽤 해키지만 작동합니다.
당신은 또한 볼 수 있습니다
답변2
특수 원자를 사용하여 \@<=
일치를 주장 할 수 있습니다.앞으로( =.*
만들어봐어딘가에해당 줄 앞):
:%s/\(=.*\)\@<=pattern/saturn/g