2009-05-02 7 views

답변

3

이 그것을 수행합니다

:%s/\v(\(.*)@<=[[:alnum:]]+(.*\))@=/"&"/g 

가 입력이 잘못된 경우 정규식 (예 : 괄호) 중첩 된 패턴과 일치하는 것은 잘못된다는 점에 유의해야합니다. 위의 코드는 중첩 된 괄호를 전혀 처리하지 않으며 따옴표 붙은 괄호 나 이스케이프 된 괄호도 중첩 된 괄호를 중단합니다. 조심히 다루세요. 다음과 같이

그것은 읽

 
:%s    substitute on all lines 
/    matching 
\v    (with "very magic" switched on) 
(\(.*)@<=   a position that follows an opening paren, on this line 
[[:alnum:]]+  a series of alphanumeric characters (i.e. "words") 
(.*\))@=   that are followed by a closing paren, on this line 
/    replace with 
"&"    the match, in quotes 
/g    globally 

그것은 정력 실제로 보면 숨김 가변 길이를 지원 않는다는 주목할만한 사실이다. 대부분의 현대 정규 표현식은 그렇지 않습니다.

+0

매우 마술은 무엇을합니까? – chappar

+0

정규식보다 정규 표현식을 짧게 만드는 특정 문자를 이스케이프 처리해야 할 필요성을 제거합니다. vim help - : h \ v를 보라. – Tomalak

0

이 명령은 따옴표로 기호, 괄호 또는 세미콜론, 공백, 탭하지 모든 것을두고 같습니다 :

:s/[^ \t=();][^ \t=();]*/"&"/g 

이뿐만 아니라 fullname을 인용 있습니다,하지만 당신은 수동으로 그 따옴표를 제거 할 수 있습니다.

경우에 따라 자동화 작업이 느려질 수 있으므로 수동으로 작업 할 가치가있는 경우가 있습니다.

실행 명령 :

:help substi 

정력에 정규 표현식 대체에 대한 도움을 얻을 수 있습니다. 다음과 같이

+0

@pts, 수동 제거를 원하지 않습니다. – chappar

+0

작동하지 않습니다. 이것은 따옴표 안에 모든 것을 둘러 쌉니다. – Tomalak

+0

나는 답안에 문서화 된대로 작동한다고 생각하는데, 나는 내 대답을 제출하기 전에 그것을 시도했다. '모든 것 '이란 무엇을 의미합니까? – pts

4

내가 이런 짓을 했을까 : 인해 확인 스위치

:s/\<\w\+\>/"&"/gc 

각 교체하라는 메시지가 표시됩니다 'C'. 'fullname'및 나머지 줄의 'a'(모두)를 바꾸려면 'n'(no)을 입력하십시오.

+0

이 답변은 실제로 문제를 해결하지 않습니다. "quote all words"부분은 수행하지만 "inside 괄호 만"부분은 완전히 잊었습니다. – Tomalak

관련 문제