¿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?

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

Pantera
fuente
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.

emtin4
fuente
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.

init3
fuente
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.

mwfearnley
fuente