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 도움말에서.
댓글
답변
최근에 일부 레거시 코드를 상속했으며 다음과 같은 모든 항목을 바꾸고 싶었습니다.
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
댓글
- 이것은 실제로 ' 원래 질문에 어떤 방식으로도 답변하지 않습니다.
li>