2011-12-03 3 views
3

줄을 찾고 그 줄에서 여러 단어를 찾으려면 대신 단순히 그들을 (레지스터에 추가하거나 파일로 내보내는 것) 저장하는 것을 선호합니다.글로벌 submatch()?

이 점에서 역 참조 (즉, 하위 표 (1) 또는 \ 1)가 가능합니까? 아니면 대체를 통해서만 가능합니까? 나는 내가하고있는 파일을 대체 할 수 있음을 깨닫는다. 그러나 그것을 바꾼다. 그러나 나는 그것을 내 보낸다.

파일을 손상시키지 않고 대체물 내에 함수를 호출하여 (서브맵을 저장하는) 방법이 있습니까? 또는 전역 검색을 사용하여 선의 일부를 캡처 한 다음 원하는대로 절약 할 수있는 함수 호출에 매개 변수로 전달할 수 있습니까?

답변

1

당신은 :h :global을 찾고 같은 것을 할 수 있습니다 : 주어진 패턴과 일치하는 모든 라인에있는 함수를 호출 할

:g/pattern/call func_to_get_and_save_text() 

.

+0

흥미 롭습니다 ... 결코 알지 못했습니다. 감사. – Ricalsin

3

:%s/pattern \(saved portion\)/\=[submatch(0), SaverFunc(submatch(1))][0]/ 

또는

:%s/pattern \(saved portion\)\zs/\=SaverFunc(submatch(1))[-1] 

을보십시오. 마지막 경우 SaverFunc는 문자열 또는 숫자를 반환해야합니다 (명시 적으로 :return 문이 없으면 숫자 0을 반환합니다). 반환 할 문자열 또는 번호는 중요하지 않습니다. string_or_number[-1]은 항상 빈 문자열로 확장됩니다.

+1

'submatch (0)'은 전체 일치 문자열이므로 (단순 패턴의 경우 캡처 그룹이 필요하지 않음)주의하십시오. 또는'\ zs'와'\ ze'를 사용하여 반환 된 일치 부분을 제어 할 수 있습니다 – sehe