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


29

내가 함께 일하고 VIm및 검색을 설정하고 내 검색 문자열의 일부 정규 표현식을 다시 사용할 수있는 몇 가지 대체 할 명령을 교체하려고합니다.

간단한 예제 I 교체 할 줄 것이다 (10)에 {10}(10)는 임의의 숫자 일 수 있습니다.

나는 여기까지왔다

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

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

이제 교체를 시도했습니다

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

그러나 이것은 출력으로 제공됩니다. {(10)}

그런 다음 시도했습니다

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

그러나, ({10})그것은 나에게도 주었다 .

나는 이것 대신 다른 종류의 마킹 / 역 참조가 필요하다고 생각 \0하지만 어디를 볼 지 모르겠다. 문제는 이것이 vim에서 가능합니까? 그렇다면 어떻게 할 수 있습니까?

답변:


37

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

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

자세한 지침은 여기 또는 vim 도움말에서 찾을 수 있습니다 .


캡처의 괄호는 백 슬래시 이스케이프됩니다.
— 랜달

0

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

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\)

각 경기를 진행하고 변경 여부를 선택할 수 있습니다.


0

각 일치 항목을 처리 할 수있는 더 좋은 방법은 코드 끝에 "c"를 추가하는 것입니다.

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

이것은 실제로 어떤 식 으로든 원래의 질문에 대답하지 않습니다
— Bernhard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.