2012-06-19 2 views
1

모든 멋진 캐릭터를 이스케이프 처리하지 않고 정규식 인 문자열을 검색 할 수 있습니까?vim에서 정규식 검색

예 : 탈출하지 않고 ^[\d\| *]$\, $ ... 내가 복사/정규식을 붙여 결과를 얻고 싶은 것

: 내 소스 파일에이 문자열을 찾고 싶어요.

+0

"정규식을 복사/붙여 넣기하고 결과를 얻고 싶습니다."- 그게 무슨 뜻입니까? 특수 문자를 피하는 데 왜 그렇게 반대합니까? –

+0

@TimPote 원본 파일에서 정규 표현식을 복사하고이 문자를 검색하고 싶습니다. 나는': /'을 입력하고 복사 된 정규 표현식을 붙여 넣습니다. –

+0

@TimPote 특수 문자를 이스케이프하지 않겠습니다. 주어진 예제는 매우 간단합니다. 복잡한 정규 표현식을 사용하고 특수 문자를 이스케이프해야 할 때 고통 스럽습니다. 오류가 있거나 찾고있는 정규 표현식이 파일에 없다면 절대 알 수 없습니다. –

답변

4

은 당신이 원하는 것은 문자열을 일치보다는 정규 표현식을 일치하려고 검색하는 그렙입니다 사용할 수 있습니다. GNU grep을 사용하면 -F 또는 --fixed-strings 플래그를 사용하여 명령을 호출하거나 대신 fgrep로 명령을 호출 할 수 있습니다. 다음은 모두 동일합니다

grep -F '^[\d\| *]$' 
grep --fixed-strings '^[\d\| *]$' 
fgrep '^[\d\| *]$' 

고정 문자열 검색 정규 표현식을 나타내거나 더 빠른 GREP을 할 때 그 고급 매칭 기능이 필요하지 않는 코드와 일치 할 때 정확하게 당신이 필요하다 정규식 엔진의 기본 레지스터 (@")에 검색 할 정규 표현식을 빠지게 한 가정 할

+0

우리의 목표를 달성하는 하나 이상의 방법이 있습니다 :-) 감사합니다 ! –

2

는 명령 행 도구 fgrep (빠른 그렙)

1

, 당신은이 작업을 수행 할 수 있습니다

/\V<C-R><C-R>=escape(@", '/\')<CR><CR> 

\V은 백 슬래시로 시작하는 원자는 "매우 nomagic"검색을 시작합니다 특별한 비 문자 적 ​​의미를 지닌다. escape()은 포함 된 백 슬래시를 모두 비효율적으로 렌더링하고 (그렇지 않으면 /이 검색 패턴을 종료합니다), 순전히 리터럴 검색입니다. 텍스트는 Ctrl + R=을 통해 검색 명령 줄에 삽입됩니다.

+0

모든 경우에 대해 제안 된 명령이 올바르게 작동하지 않습니다. 검색 할 텍스트에 백 슬래시가 포함되어 있으면 이스케이프 처리되지 않으므로 비 문자적인 의미를 가질 수 있습니다. 기본 레지스터에 '\ d'가 포함되어 있으면 명령을 사용해보십시오. 백 슬래시 대신 문자 'd'가 오는 10 진수를 찾습니다. –

+0

@ib : Doh, 네 말이 맞아. 명령에서 백 슬래시가 생략되었습니다. 내 대답을 편집했습니다. –

4

Vim 정규 표현식에서 문자의 특수 처리를 피하는 쉬운 방법이 있습니다. \V 지정자는 의 나머지 부분을 "very nomagic"모드로 전환 할 수 있습니다. 즉, 문자는 있지만 백 슬래시는 문자 그대로 이해됩니다.

따라서, 하나의 지난 검색 레지스터를 따라서

:let @/ = '\V' . escape('^[\d\| *]$', '\') 

설정 즉시 검색을위한 nN를 사용할 수있다.