Haiyuan Zhang
Haiyuan Zhang

Reputation: 42842

How to do case insensitive search in Vim

I'd like to search for an upper case word, for example COPYRIGHT in a file. I tried performing a search like:

/copyright/i    # Doesn't work

but it doesn't work. I know that in Perl, if I give the i flag into a regex it will turn the regex into a case-insensitive regex. It seems that Vim has its own way to indicate a case-insensitive regex.

Upvotes: 2107

Views: 729552

Answers (16)

DevWL
DevWL

Reputation: 18860

Note it is a difference where you place modifiers such as "\c" in your expresion:

You can use the \c escape sequence anywhere in the pattern

Regardless from the accepted answers, which states that it is no difference of where to place modyfier in a regex pattern, its looks like it actually does matter.

example text:

asdasdasdasdasd wiktor asdasdasdasd   
adasdasdasd wiktor asdasda ahjkjlkhjkl
asdasd asd asdasdasdasd iuuuu -       
asdjkkkkkkkaopbsdasda                 
wiktor ----(---------------------)--  

Match

\c^.*A?.*$
^\c.*A?.*$
^.*\cA?.*$
^.*A\c?.*$

will output: enter image description here

No match

^.\c*A?.*$
^.*A?\c.*$
^.*A?.\c*$
^.*A?.*$\c

will output: enter image description here enter image description here

  • vim -version VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jun 1 2020 06:42:35) Included patches: 1-869

Upvotes: -1

Yogesh Jilhawar
Yogesh Jilhawar

Reputation: 6323

By default, all searches in vi are case-sensitive. To do a case-insensitive search, go into command mode (press Escape), and type-
:set ignorecase
You can also type - :set ic as an abbreviation.

To change back to case-sensitive mode, type-
:set noignorecase or :set noic in command mode

Upvotes: 36

Manuel Lazo
Manuel Lazo

Reputation: 862

Some important information, if u want to find out more about the commands of vim, as mentioned below u can give a try the following steps :

  • invoke the command "help" follow by a space and then complete the word with TAB key, once u find the right command press return key.
:help ignorecase
  • information like the following will be displayed :

enter image description here

  • you will be able to move forward and backward and also watch the short command, such as the case of "ignorecase" ( 'ic' ). In addition, another short example could be the case of 'smartcase' ('scs' and some more) :

enter image description here

  • In order to leave of the documentation just type ":q" as usual and you will return to "command mode" .
:q

I really hope the information provided would be helpful for someone.

Best regards,

Upvotes: -2

Chinmay Kanchi
Chinmay Kanchi

Reputation: 66053

You can use the \c escape sequence anywhere in the pattern. For example:

/\ccopyright or /copyright\c or even /copyri\cght

To do the inverse (case sensitive matching), use \C (capital C) instead.

Upvotes: 2707

Matthieu
Matthieu

Reputation: 998

You can use in your vimrc those commands:

  • set ignorecase - All your searches will be case insensitive
  • set smartcase - Your search will be case sensitive if it contains an uppercase letter

You need to set ignorecase if you want to use what smartcase provides.

I wrote recently an article about Vim search commands (both built in command and the best plugins to search efficiently).

Upvotes: 64

Thomas
Thomas

Reputation: 2211

As others suggested:

:set ic

But the cool stuff is You can toggle such modes with:

:set ic!

Upvotes: 28

Mick
Mick

Reputation: 31959

The good old vim[grep] command..

:vimgrep /example\c/ &
  • \c for case insensitive
  • \C for case sensitive
  • % is to search in the current buffer

enter image description here

Upvotes: 29

Steely Wing
Steely Wing

Reputation: 17657

You can set ignorecase by default, run this in shell

echo "set ic" >> ~/.vimrc

Upvotes: 3

Nick Tsai
Nick Tsai

Reputation: 4149

I prefer to use \c at the end of the search string:

/copyright\c

Upvotes: 21

Gowthaman D
Gowthaman D

Reputation: 578

Vim have 2 modes

1.edit mode

  1. normal mode( Esc )

Search will work for normal mode

/\c for case sensitive

/\csearch

Upvotes: 5

DrAl
DrAl

Reputation: 72726

As well as the suggestions for \c and ignorecase, I find the smartcase very useful. If you search for something containing uppercase characters, it will do a case sensitive search; if you search for something purely lowercase, it will do a case insensitive search. You can use \c and \C to override this:

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

See:

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

Upvotes: 863

pbogut
pbogut

Reputation: 877

As @huyz mention sometimes desired behavior is using case-insensitive searches but case-sensitive substitutions. My solution for that:

nnoremap / /\c
nnoremap ? ?\c

With that always when you hit / or ? it will add \c for case-insensitive search.

Upvotes: 10

WALID BELRHALMIA
WALID BELRHALMIA

Reputation: 441

put this command in your vimrc file

set ic 

always do case insensitive search

Upvotes: 19

vbd
vbd

Reputation: 3557

To switch between case sensitive and insensitive search I use this mapping in my .vimrc

nmap <F9> :set ignorecase! ignorecase?

Upvotes: 52

Paolo Tedesco
Paolo Tedesco

Reputation: 57292

You can issue the command

:set ignorecase

and after that your searches will be case-insensitive.

Upvotes: 72

Nathan Fellman
Nathan Fellman

Reputation: 127608

You can set the ic option in Vim before the search:

:set ic

To go back to case-sensitive searches use:

:set noic

ic is shorthand for ignorecase

Upvotes: 375

Related Questions