Forcer l'achèvement normal de l'onglet Bash si l'achèvement intelligent échoue


10

Depuis que la complétion des onglets est devenue une fonctionnalité standard dans les coques, j'en suis un utilisateur très heureux. J'aime même la complétion intelligente de Bash (où il ne recherche que les fichiers PDF, si je tape evince foo <TAB>) - tant qu'il devine correctement.

Cela gâche un jour autrement heureux lorsque Bash utilise son achèvement intelligent pour refuser de terminer.

Aujourd'hui, je voulais:

tar xvf centos5.8_x86_1.ova

J'ai donc entré:

tar xvf cent<TAB>

et Bash refuse de terminer le chemin car les fichiers .ova ne sont pas ce que vous utilisez habituellement avec tar.

Je sais que je peux désinstaller le package bash-complétement pour supprimer la complétion intelligente. Mais puis-je avoir mon gâteau et le manger aussi?

Puis-je demander à bash d'utiliser la complétion intelligente en premier, et si cela échoue, puis utiliser la complétion non intelligente?


1
<spam> Zsh peut le faire. </spam>
Gilles 'SO- arrête d'être méchant'

Réponses:


9

Les éléments suivants devraient activer l'achèvement bash normal après l'échec de toutes les finitions «intelligentes» pour les programmes tar, vim et emacs:

compopt -o bashdefault tar vim emacs

voir également la page correspondante dans le manuel bash en ligne.

Attention: vous obtenez le comportement normal pour le type de complétion (commandes / noms de fichiers / noms d'utilisateur, etc.) défini par la complétion intelligente pour la commande en cours, par exemple, la complétion pour servicene terminera pas les noms de fichiers même si vous appelez complete -o bashdefault service.

Dans ce cas et dans d'autres cas où l'autocomplétion intelligente échoue, vous pouvez toujours appuyer sur Alt-/(ou M-/dans la notation du manuel bash) pour compléter les noms de fichiers presque de la même manière que TAB fonctionne si la complétion intelligente est désactivée (presque de la même manière dans le sens où M-/cela ne signifie pas modèles complets comme *.txt). Voir ici pour les séquences de touches pour d'autres types de compléments tels que la commande et les noms d'utilisateur.


2
Merci pour la mention Alt- /, je ne savais pas que c'était là
Michael Speer

1

bash achèvement est une extension de l'achèvement standard de bash et est lui-même un programme bash. Donc, si vous voulez changer la façon dont le programme agit, changez-le simplement. Ceci est un logiciel gratuit, vous êtes libre de le faire. Pour le cas spécifique de la tarcommande, le fichier est /usr/share/bash-completion/completions/tar. Pour compléter tarautomatiquement un fichier avec une extension ova, ajoutez-le simplement à la ligne

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

donc ça dit

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

Notez qu'il s'agit du chemin et du code existant pour Debian Wheezy (version stable actuelle). Une distribution ou une version différente peut avoir un code différent mais l'idée est la même. Ouvrez le code et ajustez-le pour faire ce que vous voulez qu'il fasse.

Edit: Je viens de remarquer que la question était sur le point chaque fois qu'il ne trouve pas de correspondance et non seulement le cas particulier d'ajouter ovaà tar. Peut-être que cela peut encore être utile à quelqu'un, pour savoir où chercher la source.


4
La modification des fichiers dans / usr qui appartiennent au gestionnaire de paquets est un bon moyen d'induire un choc désagréable lors de la mise à niveau. Mieux: remplacer la configuration packagée.
Chris Down

1
@ChrisDown et comment feriez-vous cela? Je suis toujours à la recherche de la solution propre .bashrc.
Clayton Stanley
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.