VIM 대체를 사용하여 검색 패턴의 일부 재사용

VIM 대체를 사용하여 검색 패턴의 일부 재사용

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

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

지금까지 왔어요

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

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

이제 교체하려고 시도했습니다.

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

그러나 이것은 출력을 제공합니다{(10)}

그런 다음 시도했습니다.

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

그러나 이것은 나에게 ({10})종결을 제공하지만 내가 원하는 것은 아닙니다.

this 을 대체하려면 다른 종류의 마크업/역참조가 필요하다고 생각하는데 \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

관련 정보