모든 멋진 캐릭터를 이스케이프 처리하지 않고 정규식 인 문자열을 검색 할 수 있습니까?vim에서 정규식 검색
예 : 탈출하지 않고 ^[\d\| *]$
\
, $
... 내가 복사/정규식을 붙여 결과를 얻고 싶은 것
: 내 소스 파일에이 문자열을 찾고 싶어요.
모든 멋진 캐릭터를 이스케이프 처리하지 않고 정규식 인 문자열을 검색 할 수 있습니까?vim에서 정규식 검색
예 : 탈출하지 않고 ^[\d\| *]$
\
, $
... 내가 복사/정규식을 붙여 결과를 얻고 싶은 것
: 내 소스 파일에이 문자열을 찾고 싶어요.
은 당신이 원하는 것은 문자열을 일치보다는 정규 표현식을 일치하려고 검색하는 그렙입니다 사용할 수 있습니다. GNU grep을 사용하면 -F 또는 --fixed-strings 플래그를 사용하여 명령을 호출하거나 대신 fgrep로 명령을 호출 할 수 있습니다. 다음은 모두 동일합니다
grep -F '^[\d\| *]$'
grep --fixed-strings '^[\d\| *]$'
fgrep '^[\d\| *]$'
고정 문자열 검색 정규 표현식을 나타내거나 더 빠른 GREP을 할 때 그 고급 매칭 기능이 필요하지 않는 코드와 일치 할 때 정확하게 당신이 필요하다 정규식 엔진의 기본 레지스터 (@"
)에 검색 할 정규 표현식을 빠지게 한 가정 할
우리의 목표를 달성하는 하나 이상의 방법이 있습니다 :-) 감사합니다 ! –
는 명령 행 도구 fgrep
(빠른 그렙)
, 당신은이 작업을 수행 할 수 있습니다
는/\V<C-R><C-R>=escape(@", '/\')<CR><CR>
\V
은 백 슬래시로 시작하는 원자는 "매우 nomagic"검색을 시작합니다 특별한 비 문자 적 의미를 지닌다. escape()
은 포함 된 백 슬래시를 모두 비효율적으로 렌더링하고 (그렇지 않으면 /
이 검색 패턴을 종료합니다), 순전히 리터럴 검색입니다. 텍스트는 Ctrl + R=을 통해 검색 명령 줄에 삽입됩니다.
모든 경우에 대해 제안 된 명령이 올바르게 작동하지 않습니다. 검색 할 텍스트에 백 슬래시가 포함되어 있으면 이스케이프 처리되지 않으므로 비 문자적인 의미를 가질 수 있습니다. 기본 레지스터에 '\ d'가 포함되어 있으면 명령을 사용해보십시오. 백 슬래시 대신 문자 'd'가 오는 10 진수를 찾습니다. –
@ib : Doh, 네 말이 맞아. 명령에서 백 슬래시가 생략되었습니다. 내 대답을 편집했습니다. –
Vim 정규 표현식에서 문자의 특수 처리를 피하는 쉬운 방법이 있습니다. \V
지정자는 의 나머지 부분을 "very nomagic"모드로 전환 할 수 있습니다. 즉, 문자는 있지만 백 슬래시는 문자 그대로 이해됩니다.
따라서, 하나의 지난 검색 레지스터를 따라서
:let @/ = '\V' . escape('^[\d\| *]$', '\')
설정 즉시 검색을위한 n
및 N
를 사용할 수있다.
"정규식을 복사/붙여 넣기하고 결과를 얻고 싶습니다."- 그게 무슨 뜻입니까? 특수 문자를 피하는 데 왜 그렇게 반대합니까? –
@TimPote 원본 파일에서 정규 표현식을 복사하고이 문자를 검색하고 싶습니다. 나는': /'을 입력하고 복사 된 정규 표현식을 붙여 넣습니다. –
@TimPote 특수 문자를 이스케이프하지 않겠습니다. 주어진 예제는 매우 간단합니다. 복잡한 정규 표현식을 사용하고 특수 문자를 이스케이프해야 할 때 고통 스럽습니다. 오류가 있거나 찾고있는 정규 표현식이 파일에 없다면 절대 알 수 없습니다. –