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.

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


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'

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


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.


50

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

nmap <F9> :set ignorecase! ignorecase?


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


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!

18

mettez cette commande dans votre fichier vimrc

set ic 

toujours faire une recherche insensible à la casse


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


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

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.


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


Et le mode visuel?
user202729

3

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

echo "set ic" >> ~/.vimrc
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.