Vim에서 대소 문자를 구분하지 않는 검색을 수행하는 방법


1650

파일에서 대문자와 같은 대문자를 검색하고 싶습니다 (예 : COPYRIGHT). 나는 다음과 같은 검색을 시도했다.

/copyright/i    # Doesn't work

그러나 작동하지 않습니다. 나는 Perl에서 i플래그를 정규 표현식으로 제공하면 정규 표현식을 대소 문자를 구분하지 않는 정규 표현식으로 바꿀 것임을 알고 있습니다. Vim은 대소 문자를 구분하지 않는 정규 표현식을 나타내는 자체 방법이있는 것 같습니다.

답변:


2106

\c패턴의 어느 곳에서나 이스케이프 시퀀스를 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

/\ccopyright또는 /copyright\c심지어/copyri\cght

역 (대소 문자 구분 )을 수행하려면 \C(대문자 C)를 대신 사용하십시오.


516
또한 \c패턴의 어느 곳에 나 나타날 수 있으므로 패턴을 입력 한 다음 대소 문자를 구분하지 않는 검색을 원할 경우 \c끝에 추가하십시오 .
Alok Singhal

268
set ignorecasevimrc에서 대소 문자를 구분하지 않는 검색 을 추가 \C하고 @AlokSinghal이 언급 한 것과 비슷한 대소 문자를 검색하는 데 사용할 수 있습니다 .
Nick McCurdy 18

163
도 있습니다 set smartcase모든 대문자를 사용하는 경우 자동으로 대소 문자를 구분하는 검색으로 전환 할 것이다.
Zaz

82
Zaz의 의견에 추가하고 싶습니다. 이미 활성화 된 set smartcase경우에만 적용됩니다 set ignorecase. 나는 이것에 잠시 동안 걸려 들었다. Vim 팁을 참조하십시오 .
Tan Wang

12
@coderMe은, 그것은, 대문자의 \c\C
아론 McDaid

680

뿐만 아니라 제안으로 \cignorecase, 내가 찾을 smartcase매우 유용합니다. 대문자가 포함 된 것을 검색하면 대소 문자를 구분하여 검색합니다. 순전히 소문자를 검색하면 대소 문자를 구분하지 않는 검색을 수행합니다. 를 사용 \c하고 \C이것을 무시할 수 있습니다 .

:set ignorecase
:set smartcase
/copyright      " Case insensitive
/Copyright      " Case sensitive
/copyright\C    " Case sensitive
/Copyright\c    " Case insensitive

보다:

:help /\c
:help /\C
:help 'smartcase'

83
문제 ignorecase는 대체뿐만 아니라 검색에도 영향을 미친다는 것입니다. 대소 문자를 구분하지 않고 (스마트) 검색을 수행하지만 기본적으로 대소 문자를 구분하여 대체하는 것이 좋습니다. 그러나 내가 아는 방법은 없습니다.
huyz

150
smartcase일 하기 위해 그것을 주목할 가치 가 set ignorecase있습니다. 그래도 좋은 팁, 감사합니다!
Skilldrick

12
다음과 같이 대체를 위해 검색 표현식에 \ C를 사용할 수 있다고 생각합니다 :%s/lowercasesearch\C/replaceString/g. 이렇게하면 원하는 기본 기능이 생성되지 않지만 검색시 스마트 케이스의 이점을 유지하면서 교체시 대 / 소문자를 구분할 수 있습니다.
Anthony DiSanti

23
패턴을 대소 문자를 구분하도록 대체에 I플래그 를 설정할 수도 있습니다. 처럼 :%s/lowercasesearch/replaceString/gI.
Rory O'Kane

1
도움말 페이지에서 참고하십시오 ( "*"나처럼 중독 된 경우에 유용) :After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella

291

ic검색하기 전에 Vim 에서 옵션을 설정할 수 있습니다 :

:set ic

대소 문자 구분 검색으로 돌아가려면 다음을 사용하십시오.

:set noic

ic 속기 ignorecase


Vim 대신 Vi를 계속 사용할만큼 운이 좋지 않은 경우에도 유일한 옵션입니다. \cvi에서는 작동하지 않습니다.
bluppfisk

61

당신은 명령을 실행할 수 있습니다

:set ignorecase

그 후 검색은 대소 문자를 구분하지 않습니다.


50

대소 문자를 구분하는 검색과 대소 문자를 구분하지 않는 검색을 전환하려면 내 .vimrc에서이 매핑을 사용합니다.

nmap <F9> :set ignorecase! ignorecase?


15
예, 그러나 ignorecase?현재 플래그 상태를 보여줍니다. (명령 줄에서)
Boris Brodski

1
감사합니다! 나에게 이것은 페이지에서 가장 유용한 답변입니다. 즉, 정확한 순간에 검색하는 내용에 따라 두 모드 사이를 빠르게 전환하는 방법입니다.
벤 힐 리어

30

vimrc해당 명령 에서 사용할 수 있습니다 .

  • set ignorecase -모든 검색은 대소 문자를 구분하지 않습니다
  • set smartcase -대문자가 포함 된 검색은 대소 문자를 구분합니다

제공 ignorecase하는 것을 사용 하려면 설정해야 smartcase합니다.

나는 최근 에 Vim 검색 명령에 관한 기사를 썼습니다 (명령과 내장 된 플러그인 모두 효율적으로 검색합니다).


1
set smartcase대문자를 사용하지 않으면 대소 문자를 구분하지 않는 검색을 수행하지 않는 것 같습니다 ... 정상입니까?
caneta

1
좋아, 아래를 읽으면 ignorecase와 smartcase를 모두 설정해야 작동합니다. 미안합니다!
caneta

24

다른 사람들이 제안했듯이 :

:set ic

그러나 멋진 점은 다음과 같은 모드를 토글 할 수 있다는 것입니다.

:set ic!

18

이 명령을 vimrc 파일에 넣으십시오

set ic 

항상 대소 문자를 구분하지 않는 검색 수행


4
왜 그런지 모르겠지만 vim이 기본적으로 대소 문자를 구분하지 않도록 설정되어 있습니다. 사용하십시오 set noic.
user1510539

18

좋은 옛 vim[grep]명령 ..

:vimgrep /example\c/ &
  • \c 대소 문자를 구분하지 않기 위해
  • \C 대소 문자 구분
  • % 현재 버퍼에서 검색하는 것입니다

여기에 이미지 설명을 입력하십시오


Cannot open file "&"
Vitaly Zdanevich

나는 그들이 %그 대신에 의미했던 것 같아요 %.
oarfish

15

\c검색 문자열 끝에 사용하는 것을 선호 합니다.

/copyright\c

10

@huyz가 언급했듯이 원하는 동작은 대소 문자를 구분하지 않는 검색을 사용하지만 대소 문자를 구분하는 대체를 사용합니다. 그에 대한 나의 해결책 :

nnoremap / /\c
nnoremap ? ?\c

항상 당신이 누르 /거나 대소 문자를 구분하지 않는 검색을 ?추가 \c할 때.


1
나쁜 제안은 아니지만 smartcase옵션 을 사용하지 못하게 합니까?
Trebor Rude

\ c 재정의 이후처럼 보인다smartcase
Matthew Woo

4

Vim에는 2 가지 모드가 있습니다

1. 편집 모드

  1. 일반 모드 (Esc)

검색은 일반 모드에서 작동합니다

대소 문자 구분을위한 / \ c

/ \ c 검색


비주얼 모드는 어떻습니까?
user202729 2016 년

3

ignorecase기본적으로 설정 하고 셸에서 실행할 수 있습니다.

echo "set ic" >> ~/.vimrc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.