VIM을 사용하여 교체하고 검색 패턴의 일부를 재사용합니다.

VIm로 작업 중이며 검색 및 바꾸기 명령을 사용하여 검색 문자열의 일부인 정규식을 재사용 할 수있는 몇 가지 대체를 수행합니다.

간단한 예는 에서 {10}로, 여기서 10은 임의의 숫자 일 수 있습니다.

여기까지 왔습니다

 .s/([0-9]*)/what here??/ 

원하는 부분과 정확히 일치합니다.

이제 교체를 시도했습니다.

 .s/([0-9]*)/{\0}/ 

하지만, 이것은 출력으로 제공됩니다. {(10)}

그런 다음

 .s/(\zs[0-9]*\ze)/{\0}/ 

하지만 ({10}), 닫습니다.하지만 원하는 것은 아닙니다.

\0,하지만 어디를 봐야할지 모르겠습니다. 따라서 문제는 vim에서이 작업을 수행 할 수 있는가입니다. 그렇다면 어떻게해야합니까?

답변

\0가 전체 일치입니다. 일부만 사용하려면 다음과 같이 설정하고 \ 1을 사용해야합니다.

.s/(\([0-9]*\))/{\1}/ 

더 자세한 지침은 여기 또는 vim 도움말에서.

댓글

  • 캡처의 괄호는 백 슬래시로 이스케이프 처리됩니다.

    li>

답변

최근에 일부 레거시 코드를 상속했으며 다음과 같은 모든 항목을 바꾸고 싶었습니다.

print "xx" print x,y print "xx" 

에서

logging.info("xy") 

또는

logging.info(x,y) 

이전 답변을 기반으로 그리고 누군가가이 답변을 통해 혜택을 받기를 바라며 사용했습니다. 다음 명령을 실행하면 모든 항목이 변경됩니다.

%s/print\( .*\)/logging.info\(\1\)/g 

%를 를 제거하고 /g를 제거하면

.s/print\( .*\)/logging.info\(\1\) 

로 끝납니다. 넘어가 다 각 일치 항목을 선택하고 변경할지 여부를 선택하십시오.

답변

각 일치 항목을 살펴볼 수있는 더 좋은 방법은 한 줄씩 이동하지 말고 코드 끝에 “c”를 추가하세요.

%s/print\( .*\)/logging.info\(\1\)/gc 

댓글

  • 이것은 실제로 ' 원래 질문에 어떤 방식으로도 답변하지 않습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다