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

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

저는 VIm검색 문자열의 일부인 정규식을 재사용할 수 있는 일부 대체 작업을 수행하기 위해 검색 및 바꾸기 명령을 설정하려고 노력하고 있습니다.

(10)간단한 예는 로 바꾸려는 줄입니다 {10}. 여기서 10은 임의의 숫자일 수 있습니다.

여기까지 왔어

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

제가 원하는 부분과 정확히 일치하네요.

이제 대체품을 사용해 보았습니다.

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

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

그런 다음 시도했습니다.

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

그러나 그것은 나에게 주어졌고 ({10})나도 닫았지만 내가 원하는 것은 아닙니다.

이 대신 다른 종류의 표시/역참조가 필요하다고 생각하는데 \0, 어디를 봐야 할지 모르겠습니다. 그렇다면 문제는 이것이 vim에서 이루어질 수 있느냐는 것입니다. 만약 그렇다면 어떻게 할 수 있습니까?

답변1

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

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

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

답변2

최근 일부 레거시 코드를 상속받았으며 다음과 같은 모든 항목을 교체하고 싶었습니다.

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

이를 통해 각 경기를 검토하고 변경할지 여부를 선택할 수 있습니다.

답변3

각 일치 항목을 검토할 수 있는 더 좋은 방법은 한 줄씩 진행하는 대신 코드 끝에 "c"를 추가하는 것입니다.

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

관련 정보