Comment faire pour que [TAB] fonctionne avec les arguments des alias à compléter automatiquement comme cela peut être fait avec la commande réelle

9

J'ai de nombreux alias que j'ai créés dans mon .bash_aliasesfichier, et ils sont très utiles, donc si je veux toutes les informations sur un paquet, je fais quelque chose comme:

allinfo software-center

Et cela fait l'équivalent de:

apt-cache show software-center

Comme l'alias est défini comme:

alias allinfo='apt-cache show'

Mais il y a un inconvénient à cela, je ne suis actuellement pas en mesure d'effectuer la saisie semi-automatique TABlors de l'utilisation à la allinfoplace de la commande réelle. Je me demandais donc s'il y avait un moyen de surmonter cet inconvénient et de faire en sorte que cela allinfo software-ce[TAB]fonctionne de la même manière que lorsque vous l'utilisez avec la commande réelle, et pas simplement créer un grand espace de tabulation?

J'utilise gnome-terminal.


Informations sur le système d'exploitation:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid

Informations sur le paquet:

gnome-terminal:
  Installed: 3.14.2-0ubuntu3
  Candidate: 3.14.2-0ubuntu3
  Version table:
 *** 3.14.2-0ubuntu3 0
        500 http://gb.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages
        100 /var/lib/dpkg/status

la source
C'est une bonne question. J'adore l'idée derrière ça. J'ai regardé partout et j'ai trouvé des réponses proches, mais elles échouent lorsque je les essaie. Si je trouve quelque chose, je vous le ferai savoir. =)
Terrance

Réponses:

6

Grande question! Si votre allinfocommande était la même que juste apt-cache, (c'est-à-dire sans le show), nous pourrions alors rechercher l'achèvement apt-cacheet l'appliquer à votre allinfoalias.

Cependant, vous voulez un sous-ensemble de l' apt-cacheachèvement, nous avons donc un peu plus de travail à faire.

Si nous regardons dans la définition d'achèvement pour apt-cache- in /usr/share/bash-completion/completions/apt-cache, nous voyons que ce qui suit est utilisé pour la showsous - commande:

        COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" 2> /dev/null ) )

- il s'agit simplement de définir la COMPREPLYvariable dans la liste des packages correspondants.

Ainsi, nous pouvons emprunter ceci et écrire notre propre fonction, et la lier à votre alias allinfo:

# define a function to print the possible completions for
# an allinfo invocation
_allinfo()
{
    _init_completion || return
    COMPREPLY=($(apt-cache --no-generate pkgnames "$cur" 2>/dev/null))
    return 0
}

# bind the above completion function to the 'allinfo' alias
complete -F _allinfo allinfo

Si vous ajoutez cette gestion à votre .bashrcfichier, vous devriez obtenir les compléments de travail comme vous vous y attendez.

Jeremy Kerr
la source
0

Je n'en ai aucune idée bash, mais cela fonctionne avec zshet certains plugins

Installez le z-shell avec

sudo apt-get install zsh

et définissez le z-shell comme votre shell standard

sudo chsh "$USER" -s $(which zsh)

et démarrer un nouveau terminal pour utiliser le z-shell

Ajouter Antigen v1

cd
git clone https://github.com/zsh-users/antigen.git

Et configurer

# path to antigen clone
source ~/antigen/antigen.zsh

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Bundles from the default repo (robbyrussell's oh-my-zsh).
antigen bundle git
antigen bundle heroku
antigen bundle pip
antigen bundle lein
antigen bundle command-not-found
antigen bundle zsh-users/zsh-completions src

# Syntax highlighting bundle.
antigen bundle zsh-users/zsh-syntax-highlighting

# Load the theme.
antigen theme robbyrussell
# antigen bundle nojhan/liquidprompt

# Tell antigen that you're done.
antigen apply

Quelques images (l'invite est nojhan / liquidprompt)

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

UN B
la source
Ah, cela ne fonctionne pour moi que si je fais exactement comme vous l'avez fait, sinon cela suppose simplement que je suis en cours d'exécution cdet fait le chemin du fichier. Comment puis-je le faire lire le .bash_aliasesfichier?
J'ai essayé d'installer ces plugins, mais je viens de commencer la antigen: command not foundconfiguration.