VIM은 한 줄의 특정 단어 뒤에 나타나는 패턴을 대체합니다.

VIM은 한 줄의 특정 단어 뒤에 나타나는 패턴을 대체합니다.

내 글에 이런 대사가 있다.

패턴 앞의 텍스트 = 쓰레기** 패턴 뒤의 텍스트는 패턴입니다

VIM에서 이 작업을 수행하면 .이후에 발생하는 이벤트만 %s/pattern/saturn/교체 pattern하고 싶습니다 =. 해당 줄 앞에 오는 모든 내용을 무시해야 합니다 =. 어떻게 하나요?

답변1

patternbefore가 한 번만 나타난다고 가정하면 다음 =두 단계로 이 작업을 수행할 수 있습니다.

:%s/pattern/saturn/g
:%s/saturn\(.\{-}=\)/pattern\1/

게으른 일치(비탐욕적 일치라고도 함)를 나타냅니다 \{-}..

설명하다

첫 번째 단계에서는 모든 항목을 다음 단계 pattern로 바꾼 다음 이전 단어를 찾아 로 바꿉니다 .saturnsaturn=pattern

경고하다

=이는 각 행이 한 번만 나타나는 것으로 가정합니다.

=더 나은 방법( 행당 하나씩 가정 )

재귀 매크로를 사용하여 이 작업을 수행할 수 있습니다.

qaqqa:%s/\(=.\{-}\)pattern/\1saturn/@aq@a

이는 단일 발생 pattern이후 를 =로 대체합니다 saturn. 매크로로 저장되고 재귀적으로 호출되면 대체할 항목이 남지 않을 때까지 파일 처리를 계속합니다. 꽤 해키지만 작동합니다.

당신은 또한 볼 수 있습니다

답변2

특수 원자를 사용하여 \@<=일치를 주장 할 수 있습니다.앞으로( =.*만들어봐어딘가에해당 줄 앞):

:%s/\(=.*\)\@<=pattern/saturn/g

관련 정보