Cómo hacer una búsqueda insensible a mayúsculas y minúsculas en Vim


1650

Me gustaría buscar una palabra en mayúscula, por ejemplo, COPYRIGHT en un archivo. Intenté realizar una búsqueda como:

/copyright/i    # Doesn't work

Pero no funciona. Sé que en Perl, si doy la ibandera en una expresión regular, se convertirá en una expresión regular que no distingue entre mayúsculas y minúsculas. Parece que Vim tiene su propia forma de indicar una expresión regular sin distinción entre mayúsculas y minúsculas.

Respuestas:


2107

Puede usar la \csecuencia de escape en cualquier parte del patrón. Por ejemplo:

/\ccopyrighto /copyright\co incluso/copyri\cght

Para hacer el inverso ( coincidencia entre mayúsculas y minúsculas ), use \C(mayúscula C) en su lugar.


516
Además, \cpuede aparecer en cualquier parte del patrón, por lo que si escribe un patrón y luego decide que desea una búsqueda que no distinga entre mayúsculas y minúsculas, simplemente agregue un \cal final.
Alok Singhal

269
Me gusta agregar set ignorecasebúsquedas insensibles a mayúsculas y minúsculas en mi vimrc, y puedo usar \Cpara hacer una búsqueda sensible a mayúsculas y minúsculas similar a lo que @AlokSinghal mencionó.
Nick McCurdy

164
También hay set smartcaseque cambiará automáticamente a una búsqueda entre mayúsculas y minúsculas si usa mayúsculas.
Zaz

83
Solo quiero agregar al comentario de Zaz. set smartcasese aplica solo cuando set ignorecaseya está activo. Estaba perplejo por esto por un tiempo. Ver consejos de Vim .
Tan Wang

12
@coderMe, es la capitalización, \cversus\C
Aaron McDaid

680

Además de las sugerencias para \cy ignorecase, me parece smartcasemuy útil. Si busca algo que contenga caracteres en mayúscula, hará una búsqueda entre mayúsculas y minúsculas; si busca algo puramente en minúsculas, hará una búsqueda que no distingue entre mayúsculas y minúsculas. Puede usar \cy \Cpara anular esto:

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

Ver:

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

83
El problema ignorecasees que afecta tanto a las sustituciones como a las búsquedas. Creo que tiene sentido tener búsquedas (inteligentes) que no distingan entre mayúsculas y minúsculas, pero las sustituciones distinguen entre mayúsculas y minúsculas por defecto. Pero no hay forma de hacer eso que yo sepa.
huyz

150
Vale la pena señalar que para smartcasetrabajar, también necesita set ignorecase. Un gran consejo, gracias!
Skilldrick

12
Creo que sólo podría utilizar un \ C en su búsqueda de expresiones para las sustituciones, así: :%s/lowercasesearch\C/replaceString/g. Esto no crea la funcionalidad predeterminada que desea, pero le permite forzar la distinción entre mayúsculas y minúsculas para los reemplazos y al mismo tiempo beneficiarse de smartcase al buscar.
Anthony DiSanti

23
También puede establecer el Iindicador en una sustitución para forzar que el patrón distinga entre mayúsculas y minúsculas. Al igual :%s/lowercasesearch/replaceString/gI.
Rory O'Kane

1
Nota de la página de ayuda (útil si eres adicto "*" como yo):After "*" and "#" you can make 'smartcase' used by doing a "/" command, recalling the search pattern from history and hitting <Enter>.
mcella

291

Puede configurar la icopción en Vim antes de la búsqueda:

:set ic

Para volver a las búsquedas que distinguen entre mayúsculas y minúsculas, use:

:set noic

ic es taquigrafía para ignorecase


También es su única opción si tiene la mala suerte de seguir usando Vi en lugar de Vim. \cno funciona en vi.
bluppfisk

61

Puedes emitir el comando

:set ignorecase

y después de eso, sus búsquedas no distinguen entre mayúsculas y minúsculas.


50

Para cambiar entre búsqueda sensible a mayúsculas y minúsculas, uso esta asignación en mi .vimrc

nmap <F9> :set ignorecase! ignorecase?


15
Sí, pero le ignorecase?muestra el estado actual de la bandera. (en la línea de comando)
Boris Brodski

1
¡Gracias! Para mí, esta es la respuesta más útil en la página: una forma de alternar rápidamente entre los dos modos dependiendo de lo que esté buscando en ese momento exacto.
Ben Hillier

31

Puedes usar en tus vimrccomandos:

  • set ignorecase - Todas sus búsquedas serán mayúsculas y minúsculas
  • set smartcase - Su búsqueda será sensible a mayúsculas y minúsculas si contiene una letra mayúscula

Debe configurar ignorecasesi desea utilizar lo que smartcaseproporciona.

Recientemente escribí un artículo sobre los comandos de búsqueda de Vim (tanto el comando integrado como los mejores complementos para buscar de manera eficiente).


1
Parece que set smartcaseno realiza búsquedas sin distinción entre mayúsculas y minúsculas si no uso letras mayúsculas ... ¿es eso normal?
caneta

1
Ok, solo lea a continuación que debe configurar ignorecase y smartcase para que funcione. ¡Lo siento por eso!
caneta

24

Como otros sugirieron:

:set ic

Pero lo mejor es que puedes alternar dichos modos con:

:set ic!

18

pon este comando en tu archivo vimrc

set ic 

siempre haga una búsqueda insensible a mayúsculas y minúsculas


44
No sé por qué, pero mi vim está configurado en mayúsculas y minúsculas por defecto, para contrarrestar esto. uso set noic.
user1510539

18

El buen viejo vim[grep]comando ...

:vimgrep /example\c/ &
  • \c para mayúsculas y minúsculas
  • \C para mayúsculas y minúsculas
  • % es buscar en el búfer actual

ingrese la descripción de la imagen aquí


Cannot open file "&"
Vitaly Zdanevich

Supongo que se referían a él en %lugar de %.
pez remo

15

Prefiero usar \cal final de la cadena de búsqueda:

/copyright\c

10

Como @huyz menciona, a veces el comportamiento deseado es usar búsquedas que no distinguen entre mayúsculas y minúsculas pero sustituciones sensibles a mayúsculas y minúsculas. Mi solución para eso:

nnoremap / /\c
nnoremap ? ?\c

Con eso siempre cuando presionas /o ?agregará \cpara la búsqueda que no distingue entre mayúsculas y minúsculas.


1
No es una mala sugerencia, pero ¿te impide usar la smartcaseopción?
Trebor Rude

Parece que sería desde las anulaciones \ csmartcase
Mateo Woo

4

Vim tiene 2 modos

Modo 1.edit

  1. modo normal (Esc)

La búsqueda funcionará para el modo normal

/ \ c para mayúsculas y minúsculas

/ \ c buscar


¿Qué pasa con el modo visual?
user202729

3

Puede establecer ignorecasede forma predeterminada, ejecutar esto en shell

echo "set ic" >> ~/.vimrc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.