Question

Question: J'ai une question qui est apparemment pas répondu à cette question déjà posée d'achèvement Bash sur le débordement de pile. La question est, comment obtenir la complétion des alias Bash (pour tout alias) sur une sous-partie.

Exemple: Par exemple, supposons que je les alias suivants:

open.alicehome="cd /usr/home/alice"
open.bakerhome="cd /usr/home/baker"
open.charliehome="cd /usr/home/charlie"
gohomenow="shutdown -now"

Je voudrais saisir paresseusement juste "boulanger {{TAB}}" pour invoquer le second alias.

Je voudrais saisir paresseusement juste « maison {{TAB}} » pour obtenir une liste de tous les alias ci-dessus que je peux alors choisir avec le clavier (optimale) ou choisissez en tapant un sous-chaîne non équivoque qui établit une distinction entre les trois options (moins optimale).

.. OU ..

Je voudrais saisir paresseusement juste « maison », puis appuyez plusieurs fois sur {{TAB}} jusqu'à ce que l'alias spécifique que je veux apparaît, puis appuyez sur {{}} ENTRER pour l'exécuter.

Ne hésitez pas à faire preuve de créativité: Si vous avez une façon de le faire, même si elle nécessite le recours à carriole extrême gourou, s'il vous plaît ne hésitez pas à partager et ne hésitez pas à expliquer votre carriole gourou au niveau d'un enfant de cinq ans qui devra essayer de mettre en œuvre votre idée pour lui-même.

Liens vers des pages-Web ou RTFMs existants sont les bienvenus.

Était-ce utile?

La solution

Vous pouvez générer les correspondances pour une sous-chaîne spécifiée avec compgen -c -X'!*substring*'

Pour inclure dans autocomplétion bash, vous pouvez créer un fichier .bash_completion dans votre répertoire contenant quelque chose comme ceci:

_comp() {
    local cur

    cur=${COMP_WORDS[$COMP_CWORD]}

    COMPREPLY=( $( compgen -c -X '!*'$cur'*' ) )

}
complete -F _comp $nospace eval

Cette fonction match se déroulera lorsque vous appuyez sur les arguments <TAB> à la commande eval. Je ne l'ai pas trouvé un moyen d'inclure une nouvelle fonction de correspondance pour la première recherche de commande dans bash, je n'ai trouvé la documentation sur la façon d'ajouter des achèvements personnalisés pour une commande spécifique, comme ci-dessus <=>.

Mais je suis un peu sceptique sur la façon dont ce utile est ... Il n'y a pas moyen facile de sélectionner que vous correspondez voulez dans la liste.

Autres conseils

Si vous voulez vraiment changer le comportement de l'onglet de bash,

# ~/.inputrc
# The default binding for [Tab] is ``complete'', which is what we're used to.
# ``menu-complete'' gives you irssi-like behavior: cycle through completions.
"\t": menu-complete

Ceci est documenté dans La bibliothèque GNU Readline # Laisser Type de Readline vous .

Probablement, vous pouvez obtenir ce que vous voulez avec les paramètres bash_completion personnalisé, mais je ne vais pas faire le travail pour vous, ok? : -)

Si vous ne savez pas de quoi je parle, voir ici et pour plus de détails. Soit dit en passant, je trouverais très ennuyeux cette

  

Je voudrais paresseusement il suffit de taper   « Maison », puis appuyez plusieurs fois sur   {{TAB}} jusqu'à ce que l'alias spécifique I   voulez apparaît, puis appuyez sur {{}} pour ENTRER   l'exécuter.

que je pense est le M $ style de "fin" (vous venez pour l'environnement DOS / Windows?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top