2010-12-29 5 views
0

검색시 문자열에 대해 여러 가지 옵션을 지정하려면 어떻게합니까? 예를 들어, jspPar, btn 또는 jspAtt으로 끝나는 문자 조합이 모두 K 인 조합을 찾고 싶습니다.간단한 정규식 질문 (vim 검색/바꾸기)

또한 원래 접두어에 따라 문자열로 바꿔야합니다. 예를 들어 접두어가 jspPar 인 경우 문자를 P으로 바꿔야합니다. (btnjspAtt에 대해서는 BA이라고합시다).

답변

5

은 당신이 찾고있는 것을

\(jsPar\|btn\|jspAtt\)[^ \t]*K 

인가?

\(jsPar\|btn\|jspAtt\) "는 공백이나 탭 문자 (. 포함 영)이 시점에서, 어떤 금액과 일치"[^ \t]* 말한다 다음, "이 시점에서, 이러한 대안의 일치"라고, 그리고 물론 K이에 "의미 포인트 일치 a K ". 당신이 머무르는 질문에 대한


이 뭔가를 할 수 있습니다 :

%s/\(jsPar\|btn\|jspAtt\)[^ \t]*\zsK/\=submatch(1) == 'jsPar' ? 'P' : submatch(1) == 'btn' ? 'B' : 'A' /g 

합니다 (\zs 그래서 단지 "K는"대체됩니다 "경기가이 지점에서 시작 생각합니다"라고 .)

그러나 나는 이있는 경우에만 한 번에 대체 할 수 있습니다. 그렇지 않으면 난 그냥 세 s///의 실행 것 :

명령 이력을 감안할 때
%s/jspAtt[^ \t]*\zsK/A/g 
%s/jsPar[^ \t]*\zsK/P/g 
%s/btn[^ \t]*\zsK/B/g 

, 즉 훨씬 적은 입력, 그리고 또한 디버깅을 필요로 할 가능성은 매우 낮, 어떤 계산을 지정할 때 항상 잠재입니다 반면.

+0

OR을 이스케이프 처리해야합니다. \ | http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtml – RobertB

+0

예, 이미 수정되었습니다. Perl이 아닌 regexp 방언이 나를 탈출시키지 않을 것을 기억하지 못합니다. –

+0

질문에 대한 나의 추가 사항은 무엇입니까? –