2009-06-29 9 views
6

'ruby'라는 텍스트가있는 모든 줄을 'myruby'가 아닌 다음에 이렇게하면됩니다.vim에 대한 정규 표현식 설명

:g/\<ruby\>/ 

내 질문은 무엇보다 여기보다 작은 상징의 의미는 무엇입니까? 내가 사용한 정규 표현식은 루비로 프로그래밍하는 것뿐입니다.

마찬가지로 나는 세 개의 연속 빈 줄을 찾으려면 다음이 내가 내 질문은 내가 (중괄호 열기) 첫 번째 중괄호를 탈출하지만 두 번째 곱슬을 탈출하고 있지 않다 왜

/^\n\{3} 

을 할 것 인 것이다 중괄호 (닫는 중괄호)?

답변

13

\<\>은 단어 경계를 의미합니다. Perl에서는 grep과 less (3 OTOH로 이름을 짓기 위해) \b을 사용합니다. 그래서 Ruby에서 같다고 상상합니다.

두 번째 질문에 대해서는 전체 표현 {3}에 대해 이스케이프가 필요합니다. 당신은 각 중괄호를 벗어나지 않고 오히려 모든 것을 함께 피합니다.

자세한 내용은 this question을 참조하십시오. 첫 번째 정규 표현식에 대한

0

, 당신은 할 수 :

:g/[^\ ]ruby\/

이것은 공간이 전에 당신의 루비 키워드 뒤에 있었다 확인합니다.

+3

하지만 줄의 처음이나 끝에있는 'ruby'와 일치하지 않습니다. –

+0

@Nathan 좋은 지적 ... – samoz

+0

도 아니고 아름다운 루비도 아니고 '이 루비를 훔친 것도 아니고 ...' –

16

regexes에서 백 슬래시 이스케이프를위한 Vim의 규칙이 일관되지 않습니다. \{...}의 여는 중괄호를 이스케이프 처리해야하지만 [...]은 이스케이프가 필요하지 않으며 캡처 그룹은 \(...\) (열기 및 닫기 괄호로 이스케이프 처리)입니다. 다른 불일치도 있습니다.

고맙게도 Vim을 사용하면 magic 설정을 통해 regex-re-rex 기반으로이 동작을 변경할 수 있습니다. 정규식 시작 부분에 \v을 입력하면 이스케이프 규칙이보다 일관성있게 유지됩니다. 숫자, 문자 및 밑줄을 제외한 모든 것이 "마법"입니다. 따라서 문자 이외의 문자를 삽입하지 않으려면 백 슬래시가 필요하지 않습니다.

첫 번째 예는 :g/\v<ruby>/이되고 두 번째 예는 /\v^\n{3}이됩니다. 자세한 내용은 :h /magic:h /\v을 참조하십시오.

+2

당신의 vimrc를 항상 마법 모드로 설정할 수 있습니다. 그런데 '마법'표현은 \ v가 아니라 \ m으로 시작한다고 생각합니다. \ v는 '마법 없음'을 의미합니다. – Oli

+0

아니요, 실제로 \ v는 "매우 마법"을 의미합니다. 즉, '0'- '9', 'a'- 'z', 'A'- 'Z'및 '_'을 제외한 모든 ASCII 문자는 특별한 의미를 갖기 때문에 이스케이프 할 필요가 없습니다. – binOr