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.

Haiyuan Zhang
fuente

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.

Chinmay Kanchi
fuente
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'
DrAl
fuente
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

Nathan Fellman
fuente
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.

Paolo Tedesco
fuente
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?

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

Matthieu
fuente
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!
Thomas
fuente
18

pon este comando en tu archivo vimrc

set ic 

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

BELRALMIA WALID
fuente
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í

Mick
fuente
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
Nick Tsai
fuente
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.

pbogut
fuente
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

Gowthaman D
fuente
¿Qué pasa con el modo visual?
user202729
3

Puede establecer ignorecasede forma predeterminada, ejecutar esto en shell

echo "set ic" >> ~/.vimrc
Ala de acero
fuente