Como fazer com que o [TAB] trabalhe com argumentos de alias para o preenchimento automático, como pode ser feito com o comando real

9

Eu tenho muitos aliases que criei no meu .bash_aliasesarquivo e eles são muito úteis, portanto, se eu quiser todas as informações em um pacote, 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 TABao usar allinfoo comando real. Então, eu queria saber se havia uma maneira de superar essa desvantagem e fazê-la allinfo software-ce[TAB]funcionar de maneira igual quando você o usa com o comando real, e não apenas criar um espaço de tabulação grande?

Eu estou usando gnome-terminal.


Informações do SO:

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

fonte
Essa é uma boa pergunta. Eu amo a idéia por trás disso. Eu tenho procurado por toda parte e encontrei algumas respostas próximas, mas elas falham quando eu as experimento. Se eu apresentar alguma coisa, eu o informarei. =)
Terrance 26/07

Respostas:

6

Ótima pergunta! Se o seu allinfocomando fosse o mesmo que apenas apt-cache(ou seja, sem o show), poderíamos examinar a conclusão apt-cachee aplicá-lo ao seu allinfoalias.

No entanto, você deseja um subconjunto da apt-cacheconclusão, portanto, temos um pouco mais de trabalho a fazer.

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

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

- isto está apenas configurando a COMPREPLYvariável para a lista de pacotes correspondentes.

Portanto, podemos emprestar isso e escrever nossa própria função e vinculá-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 relacionamento ao seu .bashrcarquivo, deverá concluir as conclusões conforme o esperado.

Jeremy Kerr
fonte
0

Não tenho ideia bash, mas funciona com zshe 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

Adicionar Antigen v1

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

E configurar

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

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

AB
fonte
Ah, isso só funciona para mim se eu fizer exatamente como você fez, caso contrário, apenas assume que estou executando cde executa o caminho do arquivo. Como faço para ler o .bash_aliasesarquivo?
Tentei instalar esses plugins, mas acabei de entrar antigen: command not foundna configuração.