Git Bash Completion
Publicado em Developer
bash git vim
Achei um trequinho bem interessante para quem usa o Git: o script git-completion.bash que permite inserir alguns recursos de auto-completar no bash. Tá, eu sei que podemos fazer alguns aliases para o Git e economizar digitação, mas olhem só que legal:
[taq@taqn bla (temp)]$ git <tab><tab> add diff rebase am fast-export relink annotate fetch remote apply filter-branch repack archive format-patch request-pull bisect fsck reset blame gc revert br get-tar-commit-id rm ...
Só esse "resuminho" já me ajuda quando esqueço algum comando, mas tem mais:
[taq@taqn bla (master)]$ git checkout <tab> HEAD master temp [taq@taqn bla (master)]$ git checkout t<tab>emp Switched to branch "temp" [taq@taqn bla (temp)]$ git co <tab> # ei! aquele 'co' é um alias! HEAD master temp [taq@taqn bla (temp)]$ git co tes<tab>te.txt # nomes de arquivos! [taq@taqn bla (temp)]$ git log <tab> HEAD master temp [taq@taqn bla (temp)]$ git log --<tab> --abbrev= --committer= --min-age= --reverse --abbrev-commit --date= --name-only --root --after= --date-order --name-status --since= --all --follow --no-merges --topo-order --all-match --grep= --not --until= --author= --left-right --pretty= --before= --max-age= --raw --cherry-pick --max-count= --relative-date
Ei, dá para brincar um monte com esse treco. Tem alguns detalhes que eu reparei que não sei se não entendi direito ou se são pequenos bugs (alguém mais sentiu falta do --stat do log ali em cima?), mas do jeito que está já está bem interessante! Para instalá-lo é fácil, podemos pegar o código do repositório acima ou verificar se a nossa distro contém o dito cujo. No meu caso, encontrei ele junto com o pacote do Git aqui no Slackware:
[taq@~]grep completion /var/log/packages/git-1.5.5-i486-1 usr/doc/git-1.5.5/contrib/completion/ usr/doc/git-1.5.5/contrib/completion/git-completion.bash
Aí é só copiar para algum lugar no sistema onde você costuma deixar os seus scripts do bash e usar o source para incorporá-lo:
source git-completion.bash
E para por a cereja no bolo, alterar a variável do Bash PS1, definindo-a como '[\u@\h \W$(__git_ps1 " (%s)")]\$ ' (sendo que podemos customizar isso depois), e quando estivermos em um diretório que contenha um repositório o prompt irá nos mostrar a branch corrente:
[taq@taqn bla (master)]$ git co temp Switched to branch "temp" [taq@taqn bla (temp)]$
Eu deixei a minha PS1 assim (tudo junto, sem quebrar a linha hein!):
PS1='\[\e]2;terminal \w\a\][\[\e[37;1m\]\u@\[\e[36;1m\]\h\w\[\e[32;40m \]$(__git_ps1 " %s")\[\e[0m\]]\$ '
O que resultou em algo desse tipo:
Algumas dicas de como configurar as cores vocês podem encontrar aqui.
E agora uma firulinha para o Vim. Como quando usamos o source com o script incorporamos as funções dele no bash, podemos pedir que uma das opções da nossa linha de status do Vim seja:
:set statusline=%{system('__git_ps1\ \%s')}
Isso vai mostrar a branch corrente na linha de status. Mudando de branch, é automaticamente atualizada. Legal!
Comentários
Comentários fechados.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300
Interessante! Eu achei uma outra maneira bem divulgada na web para mostrar o branch atual do diretorio, diferente desse que tá mostrando. Bacana!
Opa!
Peguei seu blog na lista do vimbook! Já está adicionado ao meu googlereader. :-)
E a propósito, excelente dica, caiu como uma luva para o meu projeto.
[]'s
Valeu cara!
Muito bom!
Parabens!
E eu sempre me confundia e pressionava taba para git chec só que não funciona!
Vou testar.
Cara q legal!! Vou usar hehehe!
Eu estou desenvolvendo Rails no GEdit e fiz um plugin para mostrar o branch atual -> http://blog.iconcreative.net/2008/5/31/git-branch-no-gedit.
Assim que sobrar um tempinho quero fazer para usar direto no GEdit os comandos do Git.
Grande Abraço!