¿Puedo hacer que la finalización automática de Tab no distinga entre mayúsculas y minúsculas en Bash?


144

La Terminal de Ubuntu utiliza la finalización automática sensible a mayúsculas y minúsculas, como supongo que sería de esperar para Linux.

Pero creo que a menudo sería más conveniente usar uno que no distinga entre mayúsculas y minúsculas, para evitar que tenga que ser preciso al comenzar un nombre, y probablemente valga la pena los falsos positivos adicionales. ¿Es posible cambiar este comportamiento?


Muy buena pregunta Como herramienta de usabilidad, la finalización de pestañas no debe ser tan estricta como el sistema informático en general cuando se trata de nombrar cosas.
masterxilo

Respuestas:


170

Para que bashno se distinga entre mayúsculas y minúsculas para el usuario actual:

Ejecute el siguiente script de shell en una terminal:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

Inicie un nuevo shell (vuelva a abrir el terminal).

Para realizar los cambios en todo el sistema:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

Para más detalles, ver man bash. Sí, es una página larga, pero bash es un programa algo complejo, y si lo desea, simplemente busque en esa página "sin distinción entre mayúsculas y minúsculas" para ir a la sección correspondiente. La gente suele aprender bash una opción a la vez o un script de bash a la vez y lleva mucho tiempo dominar todos los matices. Su interés puede variar


Gracias. Aprecio la solución amigable para el usuario / no amigable para el administrador. La línea de eco parece haber funcionado, pero ahora parece que he perdido la capacidad de usar Ctrl-Izquierda / Derecha para mover el cursor. Además, sería >>más seguro que >?
mwfearnley

En general >> será más seguro, mi error, estaba asumiendo que no tenía un ~ / .inputrc. También configuré noclobber =) Poco seguro de por qué sus teclas de flecha no funcionan, no puedo replicar eso. Puede eliminar ~ / .inputrc e iniciar un nuevo shell.
Panther

Sí, funciona de nuevo si lo elimino ... De acuerdo con linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html, ¿ la nueva entrada podría estar anulando la global?
mwfearnley

2
Mierda, copié esto en / etc / inputrc y ya no puedo escribir "i" y cuando escribo "e" simplemente escribe "ssssssssss [..]" en la consola ... mejor usa la solución de @ emtin4
Luca Steeb

2
@LucaSteeb También lo golpeé, pero luego me di cuenta de que este bloque completo no se debe poner en su .inputrc, sino que se escribió una vez. Solo $include /etc/inputrcy set completion-ignore-case ondebe estar en su archivo ~ ..inputrc.
Chris

49

Abra una terminal y escriba el siguiente comando:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

Introducir la contraseña. Reiniciar terminal.

Si en algún caso desea eliminar mayúsculas y minúsculas, solo edite el archivo / etc / inputrc eliminando la set completion-ignore-caselínea.

Eso es todo.


OK, te lo aclare. Toma tiempo aprender sobre bash, pero sigue explorando, leyendo y preguntando. linuxcommand.org es un comienzo popular;)
Panther

3
En caso de que haya más de un usuario, esto lo cambia para todos, lo que puede o no ser el comportamiento deseado
Walter Tross

2
con mucho, la respuesta más directa y simplista aquí
workabyte

respuesta simple y clara
Developerium

12

Sé que esta pregunta es muy antigua, pero a menos que me falte algo, creo que tengo una solución súper simple si estás usando bash.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

O simplemente agregue la línea usando su editor de texto favorito. Reinicia tu sesión de bash y disfruta.


2
Bueno, te estás perdiendo algo: ~/.inputrces leído por readline, que es lo que bash usa para proporcionar esta finalización. Readline también es utilizado por otros programas, por lo tanto, para establecer esto en general, ~/.inputrccomo se sugiere, la respuesta aceptada sería mejor.
muru

Gracias por su sugerencia, me enseña un poco más, pero debo decir que no parece más simple que la que acepté, que solo usa una línea adicional para garantizar que el nuevo archivo no anule el anterior.
mwfearnley 01 de

Perfecto. bueno, lo único que debe recordar es que bind 'set completion-ignore-case on'debe ir en una nueva línea de.bashrc
Vishrant

3

Puede hacer esto estableciendo una variable de configuración para GNU readline, que es lo que maneja la entrada en un shell interactivo.

La variable necesaria es completion-ignore-case, y se puede configurar directamente en su sesión bash con:

bind "set completion-ignore-case on"

Se puede habilitar para todas las sesiones de bash futuras colocándolo en el ~/.inputrcarchivo de los usuarios , o en el sistema /etc/inputrc, para habilitarlo para todos los usuarios. Este es el archivo de inicialización para readline.

Pero tenga en cuenta que si crea ~/.inputrc, esto anulará la copia del sistema . (Para mí, esto me hizo perder algunas asignaciones clave, como Ctrl-Left/ Right. Puede ver cuáles examinando el /etc/inputrcarchivo).
La forma de solucionar este problema es colocar la línea $include /etc/inputrcen la parte superior de ~/.inputrc, por ejemplo:

$include /etc/inputrc

set completion-ignore-case on

Para aplicar los cambios, reinicie bash o recargar inputrc , por ejemplo, con Ctrl+x, Ctrl+r.

Se puede encontrar más información sobre readline e inputrc en man bashy man 3 readline.

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.