Cómo hacer una búsqueda que no distingue entre mayúsculas y minúsculas en Vim

Me gustaría buscar una palabra en mayúsculas, 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 el i flag en una expresión regular convertirá la expresión regular en una expresión regular que no distinga entre mayúsculas y minúsculas. Parece que Vim tiene su propia forma de indicar una expresión regular que no distingue entre mayúsculas y minúsculas.

preguntado el 18 de febrero de 10 a las 06:02

15 Respuestas

Puede utilizar el \c secuencia de escape en cualquier parte del patrón. Por ejemplo:

/\ccopyright or /copyright\c o incluso /copyri\cght

Para hacer lo inverso (caso sensible coincidencia), uso \C (C mayúscula) en su lugar.

contestado el 15 de mayo de 20 a las 02:05

También, trabaja para \c puede 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 \c al final. - Alok Singhal

Me gusta agregar set ignorecase para búsquedas que no distinguen entre mayúsculas y minúsculas en mi vimrc, y puedo usar \C para hacer una búsqueda sensible a mayúsculas y minúsculas similar a lo que mencionó @AlokSinghal. - Nick McCurdy

También hay set smartcase que cambiará automáticamente a una búsqueda que distingue entre mayúsculas y minúsculas si usa letras mayúsculas. - Zaz

Solo quiero agregar algo al comentario de Zaz. set smartcase se aplica solo cuando set ignorecase ya está activo. Estuve perplejo con esto por un tiempo. Ver Consejos Vim. - bronceado wang

@coderMe, son las mayúsculas, \c frente a \C - Aaron McDaid

Así como las sugerencias para \c y ignorecase, Encuentro el smartcase muy útil. Si busca algo que contenga caracteres en mayúscula, hará una búsqueda sensible a 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. Puedes usar \c y \C para 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'

respondido 29 nov., 16:09

El problema con ignorecase es 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 sustituciones que distingan entre mayúsculas y minúsculas de forma predeterminada. Pero no hay forma de hacer eso que yo sepa. - Huyz

Vale la pena señalar que por smartcase para trabajar, también necesitas set ignorecase. ¡Buen consejo, gracias! - Habilidad

Creo que podría usar una \ C en su expresión de búsqueda para sustituciones, como esta: :%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 durante la búsqueda. - antonio di santi

También puedes configurar el I bandera en una sustitución para forzar que el patrón sea sensible a mayúsculas y minúsculas. Como :%s/lowercasesearch/replaceString/gI. - Rory O'Kane

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

Puedes configurar el ic opción en Vim antes de la búsqueda:

:set ic

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

:set noic

ic es taquigrafía para ignorecase

Respondido 18 Feb 10, 09:02

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

Puedes emitir el comando

:set ignorecase

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

Respondido 18 Feb 10, 09:02

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

nmap <F9> :set ignorecase! ignorecase?

Respondido 23 Feb 10, 11:02

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

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

Puede utilizar en su vimrc esos comandos:

  • set ignorecase - Todas sus búsquedas no distinguen entre mayúsculas y minúsculas
  • set smartcase - Su búsqueda distinguirá entre mayúsculas y minúsculas si contiene una letra mayúscula

Necesitas configurar ignorecase si quieres usar lo que smartcase proporciona.

Escribí recientemente un artículo sobre los comandos de búsqueda de Vim (ambos comandos integrados y los mejores complementos para buscar de manera eficiente).

Respondido 19 ago 18, 16:08

Parece que set smartcase no realiza búsquedas que no distinguen entre mayúsculas y minúsculas si no utilizo letras mayúsculas ... ¿es eso normal? - pluma

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

Como sugirieron otros:

:set ic

Pero lo bueno es que puedes alternar esos modos con:

:set ic!

Respondido 13 ago 18, 12:08

El buen viejo vim[grep] mando..

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

enter image description here

respondido 18 nov., 17:01

Cannot open file "&" - Vitaly Zdanévich

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

ponga este comando en su archivo vimrc

set ic 

hacer siempre una búsqueda que no distinga entre mayúsculas y minúsculas

respondido 24 nov., 15:15

No sé por qué, pero mi vim está configurado para que no distinga entre mayúsculas y minúsculas de forma predeterminada, para contrarrestar esto. usar set noic. - user1510539

Prefiero usar \c al final de la cadena de búsqueda:

/copyright\c

Respondido el 15 de junio de 17 a las 02:06

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

nnoremap / /\c
nnoremap ? ?\c

Con eso siempre cuando pegas / or ? se agregará \c para búsquedas que no distinguen entre mayúsculas y minúsculas.

Respondido 12 Feb 16, 09:02

No es una mala sugerencia, pero ¿le impide utilizar el smartcase ¿opción? - Trebor grosero

Parece que lo haría ya que \ c anula smartcase - matthew woo

Vim tiene 2 modos

1.modo de edición

  1. modo normal (Esc)

La búsqueda funcionará para el modo normal

/\C para mayúsculas y minúsculas

/\Csearch

respondido 13 mar '17, 05:03

¿Qué pasa con el modo visual? - user202729

Puede establecer ignorecase de forma predeterminada, ejecute esto en shell

echo "set ic" >> ~/.vimrc

Respondido 04 Jul 17, 02:07

De forma predeterminada, todas las búsquedas en vi distinguen entre mayúsculas y minúsculas. Para hacer una búsqueda que no distingue entre mayúsculas y minúsculas, vaya al modo de comando (presione Escape) y escriba-
:set ignorecase
También puede escribir - :set ic como abreviatura.

Para volver al modo que distingue entre mayúsculas y minúsculas, escriba-
:set noignorecase or :set noic en modo comando

Respondido el 01 de diciembre de 20 a las 17:12

:set ic! alternará - robmsmt

Alguna información importante, si desea obtener más información sobre los comandos de vim, como se menciona a continuación, puede probar los siguientes pasos:

  • Invoca el comando "ayuda" seguido de un espacio y luego completa la palabra con la tecla TAB, una vez que encuentres el comando correcto, presiona la tecla de retorno.
:help ignorecase
  • Se mostrará información como la siguiente:

enter image description here

  • podrá avanzar y retroceder y también observar el comando corto, como el caso de "ignorecase" ('ic'). Además, otro breve ejemplo podría ser el caso de 'smartcase' ('scs' y algunos más):

enter image description here

  • Para salir de la documentación simplemente escriba ": q" como de costumbre y volverá al "modo de comando".
:q

Realmente espero que la información proporcionada sea útil para alguien.

Saludos cordiales,

Respondido 02 ago 20, 16:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.