Caso em questão:
Eu sou um no mac com o bash v3.2.17, estou usando o git instalado via macports com a variante bash_completion.
Quando eu digito git checkout m<tab>
. por exemplo, concluo para master
.
No entanto, eu tenho um alias para git checkout
, gco
. Quando digito gco m<tab>
, não obtenho o nome do ramo preenchido automaticamente.
Idealmente, eu gostaria que o preenchimento automático funcionasse magicamente para todos os meus aliases. É possível? Caso contrário, gostaria de personalizá-lo manualmente para cada alias. Então, como eu vou?
Respostas:
Conforme declarado nos comentários acima,
não funcionará mais. No entanto, há uma
__git_complete
função no git-conclusão.bash que pode ser usada para configurar a conclusão de aliases como:fonte
__git_complete g __git_main
para que a conclusão do código funcione em todos os comandos do git.git-completion.bash
a partir<your git install folder>/etc/bash-completion.d/
de~/.git-completion.bash
Passo 2) adicionarsource ~/.git-completion.bash
à sua.bash_profile
Passo 3) Adicionar__git_complete gco _git_checkout
qualquer lugar após a linha acima em seu .bash_profile. Etapa 4) Reinicie o shell e aproveite a conclusão automática do seu alias! :)Também encontrei esse problema e criei esse trecho de código. Isso fornecerá automaticamente a conclusão de todos os aliases. Execute-o após declarar todos (ou qualquer) alias.
fonte
let COMP_CWORD+=$num_alias_arguments
não funcionou no Mac OS X por algum motivo. Substituí-lo por((COMP_CWORD+=$num_alias_arguments))
corrigido emborawrap_alias
engasga com aspas duplas na definição de alias, e acho que não faz muito sentido aliases de comando múltiplo (alias 'foo=bar; baz'
), então estou colocando um extra| grep -v '[";|&]'
após oalias -p
. Além disso, fica um pouco lento para centenas de definições de alias, mas fico feliz em confirmar que usar emecho
vez deeval
e canalizar a saída em um arquivo de cache (que pode sereval
editado de uma só vez) funciona bem e é super-rápido .wrap_alias
requer que as conclusões sejam configuradas, então tive que me moversource /etc/bash_completion
na frente dowrap_alias
código.let COMP_CWORD+=$num_alias_arguments
paralet \"COMP_CWORD+=$num_alias_arguments\"
.Em
git-completion.bash
há uma linha:Observando essa linha (e a função _git), você pode adicionar esta linha ao seu
.bash_profile
:fonte
Eu tenho o alias g = 'git' e, combinado com os meus aliases do git, digito coisas como
A correção mais simples para o meu caso de uso específico foi adicionar uma única linha à conclusão do git.
Logo abaixo desta linha:
Eu adicionei esta linha para lidar com meu único apelido 'g':
fonte
git-completion
ou essa linha/etc/bash_completion.d/git
, mas adicioneicomplete -o default -o nospace -F _git g
depois do meu pseudônimo.bash_aliases
e funcionou!/etc/bash-completion.d/
ou entrar novamente/usr/share/bash-completion/
, perderá suas alterações sempre que esse arquivo for atualizado usando o gerenciador de pacotes.Sim, é possível com o projeto complete-alias (no Linux). O suporte para Mac é experimental, mas os usuários relataram sucesso.
fonte
Você também pode tentar usar aliases do Git. Por exemplo, no meu
~/.gitconfig
arquivo, tenho uma seção que se parece com isso:Então você pode digitar
git co m<TAB>
, e isso deve ser expandido paragit co master
, que é ogit checkout
comando.fonte
Esta página do fórum mostra uma solução.
Coloque essas linhas em seu
.bashrc
ou.bash_profile
:Esta solução é semelhante ao script do balshetzer , mas somente este realmente funciona para mim. (o script do balshetzer teve problemas com alguns dos meus pseudônimos.)
fonte
-bash: eval: line 28: unexpected EOF while looking for matching '''
-bash: eval: line 29: syntax error: unexpected end of file
"
aspas dentro dafunction
string devem ser citadas como\"
. Provavelmente, você deve comer uma de suas'
citações em algum lugar ao longo da linha.Mais uma opção é usar o
~/.bash_completion
arquivo. Para criar ogco
alias paragit checkout
apenas colocar isso lá:Então,
~/.bashrc
você deve colocar apenas o apelido em si:Duas linhas. É isso aí.
Explicação:
O
~/bash_completion
código é obtido no final do script bash_completion principal. No gentoo, encontrei o script principal em/usr/share/bash-completion/bash_completion
.O
_xfunc git
bit cuida da fonte dogit-completion
arquivo para você, para que você não precise colocar mais nada~/.bashrc
.A resposta aceita exige que você copie
.git-completion.sh
e~/.bashrc
obtenha o código do seu arquivo, o que eu acho ruim.PS: Ainda estou tentando descobrir como não originar o
git-completion
script inteiro no meu ambiente bash. Comente ou edite se encontrar uma maneira.fonte
_xfunc git
necessário?source ~/.git-completion.sh
, deixo_xfunc
fazer isso por mim. Ele só se sente mais bonitos e de fazê-lo apenas em~/.bash_completion
. Sem o_xfunc
(ou o fornecimento) a__git_complete
função não existe.~/.bash_completion
arquivo - a_xfunc
linha funciona para mim.bashrc
.Você apenas precisa encontrar o
complete
comando e duplicar a linha com o nome alternativo.Eu tenho
alias d-m="docker-machine"
. Em palavras,d-m
deve ser o apelido paradocker-machine
.Assim, no Mac (via brew), os arquivos de conclusão estão
cd `brew --prefix`/etc/bash_completion.d/
.Para o meu caso, editei o arquivo chamado
docker-machine
.Todo o caminho na parte inferior havia:
Acabei de adicionar outra linha, com meu apelido:
fonte
docker
aliasd
. Embora, para o exemplo da pergunta, ogit checkout
alias paragco
seja mais complexo.Primeiro, procure o comando de conclusão original. Exemplo:
Agora adicione-os ao seu script de inicialização (por exemplo, ~ / .bashrc):
A
_completion_loader
linha pode não ser necessária. Mas, em algumas situações, a função de conclusão é carregada dinamicamente somente depois que você digita o comando e pressionaTAB
na primeira vez. Portanto, se você não tiver usado o comando original e tentar o alias +TAB
, poderá receber um erro como "bash: conclusão: função '_docker' não encontrada".fonte
Há muitas respostas para essa pergunta e, como eu, aposto que muitos leitores confusos. Para o meu caso, eu também tinha o requisito de que meus dotfiles funcionassem em várias plataformas com diferentes versões do Git. Eu também não,
alias g=git
mas tenhog
defini como uma função.Para conseguir isso, tive que reunir respostas diferentes aqui em uma solução. Embora isso reitere as respostas, eu já pensei que alguém no meu barco poderia achar essa compilação útil como eu teria quando cheguei a essa pergunta.
Isso pressupõe a conclusão mais antiga e mais recente do Git, os padrões do Ubuntu e
brew install git
no MacOS. No caso posterior, as conclusões concluídas instaladas pelo brew não estavam sendo processadas pelo bash (algo que vou diagnosticar mais tarde).fonte
Se você usar
alias g='git'
, eu adiciono esta linha de código em.bash_aliases
fonte