Completar tabulación sin distinción entre mayúsculas y minúsculas en Bash

142

¿Hay alguna manera de hacer que la pestaña Bash complete las mayúsculas y minúsculas?

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Estoy usando Mac OS X 10.6

Jeffrey Aylesworth
fuente

Respuestas:

170

Actualice el texto /etc/inputrcpara incluir

establecer complete-ignore-case en

Luego use ^X ^Rpara recargar la configuración.

John T
fuente
30
"también" - /etc/inputrco ~/.inputrcun archivo designado por INPUTRCson los únicos lugares a los que puede ir. Ingresar eso en un mensaje Bash no funcionará.
Dennis Williamson el
whoops! tienes razón :)
John T
10
^X ^Rrecargarinputrc
grawity
14
@DennisWilliamson: puedes hacerlo bind "set completion-ignore-case on"desde la línea de comandos; para, creo, esa sesión terminal solamente
Clay Bridges
1
¡Entonces eso es lo que tiene msysgit pero MSYS2 no tiene! Aquí estaba tratando de encontrarlo en, por ejemplo, / etc / profile ...
SamB
111

Reestructurado con la perspectiva del tiempo para contrastar los pros y los contras de la utilización [.]inputrcvs .bash_profile.
Punta del sombrero para subrayar_d por su ayuda.

Nota: La edición de la línea de comandos en Bash es proporcionada por la biblioteca Readline; personalizarlo no es trivial, pero vale la pena aprenderlo; sus características incluyen la capacidad de definir métodos abreviados de teclado personalizados para insertar fragmentos de texto predefinidos; consulte Edición de línea de comandos en el Manual de referencia de Bash

Para hacer persistente la tabulación completa entre mayúsculas y minúsculas en Bash:


Opción A: si ya tienes:

  • un /etc/inputrcarchivo (se aplica a todo el sistema, requiere modificación sudo)
  • y / o un ~/.inputrcarchivo (específico del usuario)

    y / o

planea personalizar ampliamente la biblioteca de línea de lectura y / o desea que las personalizaciones también sean efectivas para los scripts cuando llaman read -e:

Añadir línea

set completion-ignore-case on

a cualquier archivo, dependiendo de si desea que la configuración sea efectiva para todos los usuarios o el usuario actual (cree el archivo, si es necesario).

Un comando relacionado que facilita la finalización de los nombres de archivo y directorio es:

set show-all-if-ambiguous on

Esto hace innecesario presionar Tab dos veces cuando hay más de una coincidencia.


Opción B: Alternativamente, puede agregar comandos de Readline a su ~/.bash_profilearchivo específico del usuario en OS X (o ~/.bashrcen Linux), pasándolos como un argumento único al bindbuiltin incorporado :

bind "set completion-ignore-case on"
bind "set show-all-if-ambiguous on"

Tenga binden cuenta que los comandos en ~/.bash_profile/ ~/.bashrctienen prioridad sobre los comandos equivalentes en /etc/inputrco ~/.inputrc.

Como se indicó anteriormente, la configuración de Readline definida de esta manera no tendrá efecto en los scripts que llaman read -ea activar el soporte de Readline para leer la entrada del usuario.

mklement0
fuente
10
¡show-all-if-ambiguous es muy agradable! A menudo me preguntaba por qué me hicieron tabular dos veces para realizar esa acción. miles de pulsaciones de teclas guardadas en mi futuro! ¡Gracias!
user34112
44
Impresionante, incluso funciona para cdcomandos. Lo que resuelve esta pregunta y también me ahorrará miles de pulsaciones de teclas. :)
hoosierEE
1
Gran punto re show-all-if-ambiguous. Sin embargo, dado que usted dice "como alternativa", ¿hay realmente algún beneficio al hacer esto a través de bind, cuando los inputrcarchivos parecen hacerlo innecesario?
underscore_d
1
@underscore_d: Buena pregunta; por favor vea mi respuesta actualizada
mklement0
1
¡Genial, gracias! En Debian 8.2 no tenía ninguno inputrc, pero felizmente creé ~/.inputrcy agregué estos, además de otras directivas realmente útiles. Supongo que estamos asumiendo que todos los lectores saben que /etc/inputrc afecta a otros usuarios (a menos que este último anule la configuración afectada). Justo cuando estamos mencionando advertencias;)
underscore_d
1

Para evitar cambiar la configuración de todos los usuarios y evitar los permisos de root, utilice lo siguiente:

if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
echo 'set completion-ignore-case on' >> ~/.inputrc

Luego vuelva a iniciar sesión o vuelva a cargar ~ / .inputrc

Ankur A Sharma
fuente