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.