Comment faire une recherche insensible à la casse dans Vim

1650

Je voudrais rechercher un mot en majuscule, par exemple COPYRIGHT dans un fichier. J'ai essayé d'effectuer une recherche comme:

/copyright/i    # Doesn't work

mais ça ne marche pas. Je sais qu'en Perl, si je donne le idrapeau en expression régulière, cela transformera l'expression régulière en expression régulière insensible à la casse. Il semble que Vim ait sa propre façon d'indiquer une expression régulière insensible à la casse.

Haiyuan Zhang
la source

Réponses:

2107

Vous pouvez utiliser la \cséquence d'échappement n'importe où dans le motif. Par exemple:

/\ccopyrightou /copyright\cou même/copyri\cght

Pour faire l'inverse ( correspondance sensible à la casse ), utilisez à la place \C(C majuscule).

Chinmay Kanchi
la source
516
En outre, \cpeut apparaître n'importe où dans le modèle, donc si vous tapez un modèle et décidez ensuite que vous souhaitez une recherche non sensible à la casse, ajoutez simplement un \cà la fin.
Alok Singhal
269
J'aime ajouter set ignorecasepour la recherche insensible à la casse dans mon vimrc, et je peux utiliser \Cpour faire une recherche sensible à la casse similaire à ce que @AlokSinghal a mentionné.
Nick McCurdy
164
Il y a aussi set smartcasequi passera automatiquement à une recherche sensible à la casse si vous utilisez des majuscules.
Zaz
83
Je veux juste ajouter au commentaire de Zaz. set smartcases'applique uniquement lorsqu'il set ignorecaseest déjà actif. J'ai été perplexe pendant un moment. Voir les astuces Vim .
Tan Wang
12
@coderMe, c'est la capitalisation, \ccontre\C
Aaron McDaid
680

Ainsi que les suggestions pour \cet ignorecase, je trouve smartcasetrès utiles. Si vous recherchez quelque chose contenant des caractères majuscules, il effectuera une recherche sensible à la casse; si vous recherchez quelque chose de purement minuscule, il effectuera une recherche insensible à la casse. Vous pouvez utiliser \cet \Cpour remplacer ceci:

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

Voir:

:help /\c
:help /\C
:help 'smartcase'
DrAl
la source
83
Le problème ignorecaseest qu'elle affecte les substitutions ainsi que les recherches. Je trouve qu'il est logique d'avoir des recherches (intelligentes) insensibles à la casse mais des substitutions sensibles à la casse par défaut. Mais il n'y a aucun moyen de le faire que je sache.
huyz
150
A noter que pour smartcasetravailler, il faut aussi set ignorecase. Un bon conseil, merci!
Skilldrick
12
Je crois que vous pouvez simplement utiliser un \ C dans l' expression de recherche de substitutions, comme ceci: :%s/lowercasesearch\C/replaceString/g. Cela ne crée pas la fonctionnalité par défaut que vous désirez, mais cela vous permet de forcer la sensibilité à la casse pour les remplacements tout en bénéficiant de smartcase lors de la recherche.
Anthony DiSanti
23
Vous pouvez également définir l' Iindicateur sur une substitution pour forcer le modèle à respecter la casse. Comme :%s/lowercasesearch/replaceString/gI.
Rory O'Kane
1
Note de la page d'aide (utile si vous êtes "*" accro comme moi):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella
291

Vous pouvez définir l' icoption dans Vim avant la recherche:

:set ic

Pour revenir aux recherches sensibles à la casse, utilisez:

:set noic

ic est un raccourci pour ignorecase

Nathan Fellman
la source
aussi votre seule option si vous n'avez pas la chance de continuer à utiliser Vi au lieu de Vim. \cne fonctionne pas dans vi.
bluppfisk
61

Vous pouvez lancer la commande

:set ignorecase

et après cela, vos recherches ne seront pas sensibles à la casse.

Paolo Tedesco
la source
50

Pour basculer entre la recherche sensible à la casse et insensible, j'utilise ce mappage dans mon .vimrc

nmap <F9> :set ignorecase! ignorecase?

vbd
la source
15
Oui, mais ignorecase?vous montre l'état actuel du drapeau. (en ligne de commande)
Boris Brodski
1
Je vous remercie! Pour moi, c'est la réponse la plus utile sur la page: un moyen de basculer rapidement entre les deux modes en fonction de ce que vous recherchez à ce moment précis.
Ben Hillier
31

Vous pouvez utiliser dans vos vimrcces commandes:

  • set ignorecase - Toutes vos recherches seront insensibles à la casse
  • set smartcase - Votre recherche sera sensible à la casse si elle contient une lettre majuscule

Vous devez définir ignorecasesi vous souhaitez utiliser ce qui est smartcasefourni.

J'ai récemment écrit un article sur les commandes de recherche Vim (à la fois la commande intégrée et les meilleurs plugins pour rechercher efficacement).

Matthieu
la source
1
Il semble que la recherche set smartcasene respecte pas la casse si je n'utilise pas de majuscules ... est-ce normal?
caneta
1
Ok, lisez juste ci-dessous que vous devez à la fois définir ignorecase et smartcase pour que cela fonctionne. Désolé pour ça!
caneta
24

Comme d'autres l'ont suggéré:

:set ic

Mais le truc cool est que vous pouvez basculer entre ces modes avec:

:set ic!
Thomas
la source
18

mettez cette commande dans votre fichier vimrc

set ic 

toujours faire une recherche insensible à la casse

BELRHALMIE WALIDE
la source
4
Je ne sais pas pourquoi mais mon vim est réglé par défaut à la casse, pour contrer cela. utiliser set noic.
user1510539
18

La bonne vieille vim[grep]commande ..

:vimgrep /example\c/ &
  • \c insensible à la casse
  • \C pour la casse
  • % est de rechercher dans le tampon courant

entrez la description de l'image ici

Mick
la source
Cannot open file "&"
Vitaly Zdanevich
Je suppose qu'il voulait dire %au lieu de %.
oarfish
15

Je préfère utiliser \cà la fin de la chaîne de recherche:

/copyright\c
Nick Tsai
la source
10

Comme @huyz mentionne parfois le comportement souhaité utilise des recherches insensibles à la casse mais des substitutions sensibles à la casse. Ma solution pour ça:

nnoremap / /\c
nnoremap ? ?\c

Avec cela toujours lorsque vous appuyez sur /ou ?cela ajoutera \cpour la recherche insensible à la casse.

pbogut
la source
1
Ce n'est pas une mauvaise suggestion, mais cela vous empêche-t-il d'utiliser le smartcase option?
Trebor Rude
Il semble que ce serait le cas depuis \ csmartcase
Matthew Woo
4

Vim a 2 modes

1. mode d'édition

  1. mode normal (Esc)

La recherche fonctionnera pour le mode normal

/ \ c pour la casse

/ \ c recherche

Gowthaman D
la source
Et le mode visuel?
user202729
3

Vous pouvez définir ignorecasepar défaut, exécuter cela dans le shell

echo "set ic" >> ~/.vimrc
Aile d'acier
la source