VIM에서 그룹의 모든 경기에 참여하세요

VIM에서 그룹의 모든 경기에 참여하세요

공백으로 구분된 4개 이상의 문자가 포함된 텍스트를 검색하고 공백을 제거하는 바꾸기 명령을 작성하려고 합니다.

%s/\v%(([a-zA-Z])\s){3,}([a-zA-Z])/\1\2/gc

하지만

L i g ht

~이 되다

ght

예상대로 그룹에는 g이 경우 마지막 일치 항목만 포함되어 있기 때문입니다. 그룹의 모든 경기를 누적 \1하고 가입하는 방법은 무엇입니까?

답변1

(...){n,m}or 와 같은 반복 그룹이 주어지면 (...)+Vim이 해당 그룹의 모든 항목을 추출할 수 있는 방법이 없다고 생각합니다. 모든 정규식 관련 함수 및 명령 중 마지막 항목만 사용할 수 있습니다.

즉, 중첩된 대체 항목을 사용할 수 있습니다.

:s/\v%([a-zA-Z]\s){3,}[a-zA-Z]/\=substitute(submatch(0), '\s', '', 'g')/gc

\=대체에 A가 있으면 :sVim은 대체를 표현식으로 평가합니다. 이 표현에서 나는substitute()함수는 일치하는 전체 텍스트에서 모든 공백을 제거합니다 :s(submatch(0)), Ligh주는 것에서 L i g h.

관련 정보