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
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.
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)