web-dev-qa-db-fra.com

Comment obtenir que [TAB] travaille avec des arguments d'alias à compléter automatiquement, comme vous pouvez le faire avec la commande réelle

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

allinfo software-center

Et cela équivaut à:

apt-cache show software-center

Comme l'alias est défini comme:

alias allinfo='apt-cache show'

Mais il y a un inconvénient de cela, je suis actuellement incapable de compléter automatiquement TAB lorsque vous utilisez allinfo au lieu de la commande réelle. Je me demandais donc s'il existait un moyen de surmonter cet inconvénient et de faire en sorte que l'opération allinfo software-ce[TAB] fonctionne exactement de la même manière que lorsque vous l'utilisez avec la commande réelle et ne crée pas uniquement un espace de tabulation important?

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 package:

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
8
user364819

Bonne question! Si votre commande allinfo était identique à apt-cache (sans la show), nous pourrions examiner l'achèvement de apt-cache et l'appliquer à votre allinfo alias.

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

Si nous regardons dans la définition de complétion pour apt-cache - dans /usr/share/bash-completion/completions/apt-cache, nous voyons ce qui suit est utilisé pour la sous-commande show:

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

- il ne s’agit que de définir la variable COMPREPLY dans la liste des packages correspondants.

Nous pouvons donc 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 fragmentation à votre fichier .bashrc, vous devriez que les compléments fonctionnent comme prévu.

5
Jeremy Kerr

Je n'ai aucune idée de bash, mais cela fonctionne avec zsh et quelques plugins

Installez le z-Shell avec

Sudo apt-get install zsh

et définir le z-Shell comme votre shell standard

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

et démarrez un nouveau terminal pour utiliser le z-Shell

Ajouter Antigenv1

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 (Prompt is nojhan/liquidprompt)

enter image description here

enter image description here

enter image description here

0
A.B.