ChatGPT解决这个技术问题 Extra ChatGPT

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.


l
lurker

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.


Also, \c can appear anywhere in the pattern, so if you type a pattern and then decide you wanted a case-insensitive search, just add a \c at the end.
I like to add set ignorecase for case-insensitive searching in my vimrc, and I can use \C to do a case-sensitive search similar to what @AlokSinghal mentioned.
There's also set smartcase which will automatically switch to a case-sensitive search if you use any capital letters.
Just want to add to Zaz's comment. set smartcase applies only when set ignorecase is already active. I was stumped on this for a while. See Vim Tips.
@coderMe, It's the capitalization, \c versus \C
D
DrAl

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'

The problem with ignorecase is that it affects substitutions as well as searches. I find that it makes sense to have (smart) case-insensitive searches but case-sensitive substitutions by default. But there's no way to do that that I know.
Worth noting that for smartcase to work, you also need set ignorecase. Great tip though, thanks!
I believe you could just use a \C in your search expression for substitutions, like this: :%s/lowercasesearch\C/replaceString/g. This doesn't create the default functionality you desire, but it does allow you to force case-sensitivity for replacements while still benefiting from smartcase when searching.
You can also set the I flag on a substitution to force the pattern to be case-sensitive. Like :%s/lowercasesearch/replaceString/gI.
Note from the help page (useful if you are "*" addicted like me): After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
N
Nathan Fellman

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


also your only option if you're unlucky enough to still use Vi instead of Vim. \c doesn't work in vi.
P
Paolo Tedesco

You can issue the command

:set ignorecase

and after that your searches will be case-insensitive.


v
vbd

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

nmap <F9> :set ignorecase! ignorecase?


Yes, but ignorecase? shows you the current state of the flag. (in the command line)
Thank you! To me, this is the most useful answer on the page: a way to quickly toggle between the two modes depending on what you're searching for at that exact moment.
M
Matthieu

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).


It seems that set smartcase does not perform case insensitive searches if I do not use uppercase letters...is that normal?
Ok, just read below that you have to both set ignorecase and smartcase to have it work. Sorry about that!
T
Thomas

As others suggested:

:set ic

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

:set ic!

M
Mick

The good old vim[grep] command..

:vimgrep /example\c/ &

\c for case insensitive

\C for case sensitive

% is to search in the current buffer

https://i.stack.imgur.com/e4ftH.gif


Cannot open file "&"
I guess he they meant % instead of %.
C
Community

put this command in your vimrc file

set ic 

always do case insensitive search


I don't know why but my vim is set to case-insensitive by default, to counter this. use set noic.
N
Nick Tsai

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

/copyright\c

Y
Yogesh Jilhawar

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


:set ic! will toggle
p
pbogut

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.


Not a bad suggestion, but does it prevent you from using the smartcase option?
Looks like it would since \c overrides smartcase
G
Gowthaman D

Vim have 2 modes

1.edit mode

normal mode( Esc )

Search will work for normal mode

/\c for case sensitive

/\csearch


What about visual mode?
S
Steely Wing

You can set ignorecase by default, run this in shell

echo "set ic" >> ~/.vimrc

D
DevWL

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?.*$

https://i.stack.imgur.com/JDB6q.png

No match

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

https://i.stack.imgur.com/vwuaW.png

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


M
Manuel Lazo

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 :

https://i.stack.imgur.com/Lw1Pk.png

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) :

https://i.stack.imgur.com/pPzr5.png

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,