La finalización de tabulación no funciona para los comandos

50

Estoy tratando de usar la finalización de tabulación para los comandos en Ubuntu 11.04 Beta 1, ejecutando todas las últimas actualizaciones, pero parece que no funciona. (Aunque el paquete bash-complete está instalado)

La finalización de tabulación funciona correctamente solo para directorios o archivos.

¿Alguna idea de dónde cavar?

Screatch
fuente

Respuestas:

67

Comprueba si tienes el siguiente fragmento en tu .bashrc (debería estar allí de forma predeterminada)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
Adam Byrtek
fuente
¡Gracias! He reemplazado .bashrc con el mío y, por lo tanto, no pude entender en qué estaba el problema. Ahora funciona perfectamente.
Screatch
esto solucionó mi autocompletado de git bash en xubuntu 12.04 también, muchas gracias.
palmic
¿Qué hay de autocompletar para el interruptor y la opción de línea de comandos apt-get? es decir, cuando ingresa apt-get ins y luego presiona la pestaña para completarlo automáticamente.
Reza Ghodsi
3
Me gustaría agregar que el paquete bash-completiones necesario para que esto funcione. Extrañamente, la instalación estándar de mi empresa no tiene este paquete.
Edgar
13

Pensé que también agregaría la siguiente explicación adicional para una falla en la finalización de bash: es demasiado largo para un comentario y puede ser útil para alguien que tiene un problema con la finalización de bash, ya que presumiblemente esta es la pregunta canónica 'general' a la que Todos los duplicados son referidos.

Incluso si tiene la línea apropiada en su .bashrc(como en la respuesta anterior) y el bash-completionpaquete instalado, la finalización de bash puede funcionar mal si tiene shopt -s nullglobo shopt -s failgloben su .bashrco .bash_aliases.

Los siguientes escenarios se probaron con todas las personalizaciones de los usuarios .bashrcy se .bash_aliaseseliminaron para proporcionar una prueba justa, con la línea de finalización de bash apropiada en el .bashrcpresente e bash-completioninstalada.

1) El primer escenario es cuando tienes shopt -s failgloben tu .bashrco .bash_aliases.

Al intentar tabular directorios y archivos completos respectivamente, se producirán estos errores:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

Sin embargo, los comandos aún se completarán con éxito.

2) Con shopt -s nullglobhabilitado, intentar tabular un directorio o un archivo llevará a todo lo que aparece en la lista, sin finalización:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

He acortado el listado aquí, ya que era muy largo y no era necesario reproducirlo todo.

Una vez más, la finalización del comando seguirá funcionando sin embargo.

Por lo tanto, simplemente eliminar shopt -s failglobo shopt -s nullglobtambién podría resolver el problema de los errores con la finalización de bash, suponiendo que tenga la línea adecuada en su .bashrce bash-completioninstalada.


fuente
1
Buena explicación, resolvió mi problema cuando intento completar la pestaña y se produjo un error >> palabras [0] = $ {! Ref} $ {COMP_WORDS [i]}
bagustris
Si bien eso funciona como una solución alternativa, es algo malo para cualquier programador de finalización confiar. Dado que nullglob (que es nominalmente mejor para muchos) y kin podrían establecerse, cualquier código completo que requiera la semántica anterior (los comodines sin coincidencias dan como resultado el comodín en sí) debe guardar la configuración de glob actual, establecer la que necesitan y restaurar el configuración anterior de glob después, tal como se usa típicamente IFS.
Alex North-Keys
10

Además de modificar el /etc/bash.bashrcarchivo (ver otras respuestas), es posible que deba instalar el bash-completionpaquete.

Verifique si el /etc/bash_completionarchivo existe. Si no:

sudo apt-get install bash-completion

(En mi instalación de Debian 7 no se instaló inicialmente)

Sargento
fuente
7

Tan básico como pueda parecer, asegúrese de que bash sea su shell activo

echo $SHELL

Acabo de actualizar a Ubuntu 14.04.1 LTS y no tenía autocompletado de pestañas, incluso después de seguir los consejos de esta publicación, solo para darme cuenta de que mi shell estaba configurado /bin/shy no /bin/bash.

nocdib
fuente
2

Actualización a Ubuntu 14.04.01

Comprueba si tienes el siguiente fragmento en tu .bashrc (debería estar allí de forma predeterminada)

sudo vim /etc/bash.bashrc (escriba "i" para editar el archivo)

    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
     if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

Descomente 7 líneas arriba

Guardar archivo "esc + w + q + enter"

Reiniciar bash

ejecutivo bash

Diego Arriola
fuente
1
¿Qué hará esto? ¿No es así por defecto?
Tim
Como dice @Tim, esa configuración se proporciona por configuración predeterminada.
ssoto
Esto funcionó para mí
Thamaraiselvam
¿Esta respuesta funcionó de maravilla y tiene votos negativos?
greuze