Como obter [TAB] para trabalhar com argumentos de aliases para preenchimento automático, como pode ser feito com o comando real

7

Eu tenho muitos aliases que eu criei no meu arquivo .bash_aliases , e eles são muito úteis, então se eu quiser todas as informações em um pacote eu faço algo como:

allinfo software-center

E isso faz o equivalente a:

apt-cache show software-center

Como o alias é definido como:

alias allinfo='apt-cache show'

Mas há uma desvantagem disso, atualmente não consigo concluir automaticamente com TAB ao usar allinfo em vez do comando real. Então eu queria saber se havia uma maneira de superar essa desvantagem e fazer com que fazer allinfo software-ce[TAB] funcionasse da mesma forma que quando você a usa com o comando real, e não apenas criar um espaço grande na guia?

Estou usando gnome-terminal .

Informações do sistema operacional:

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

Informações do pacote:

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
    
por Great Uncle Bulgaria 26.07.2015 / 00:21

2 respostas

4

Grande pergunta! Se o seu comando allinfo foi igual a apenas apt-cache (ou seja, sem o show ), poderemos examinar a conclusão de apt-cache e aplicar isso ao seu allinfo alias.

No entanto, você quer um subconjunto da conclusão apt-cache , por isso temos um pouco mais de trabalho a fazer.

Se olharmos na definição de conclusão para apt-cache - in /usr/share/bash-completion/completions/apt-cache , veremos o seguinte para o subcomando show :

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

- isso é apenas definir a variável COMPREPLY para a lista de pacotes correspondentes.

Então, podemos emprestar isso e escrever nossa própria função, e ligá-la ao seu 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

Se você adicionar esse fragement ao seu arquivo .bashrc , deverá obter as conclusões funcionando conforme o esperado.

    
por Jeremy Kerr 27.07.2015 / 07:49
0

Não faço ideia de bash , mas funciona com zsh e alguns plugins

Instale o z-shell com

sudo apt-get install zsh

e defina o z-shell como seu shell padrão

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

e inicie um novo terminal para usar o z-shell

Adicione Antigen v1

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

e configure

# 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

Algumas imagens (o prompt é nojhan / liquidprompt)

    
por A.B. 26.07.2015 / 13:53