Python – Autocomplete no Python e Vim

vim_with_python_auto_complete

Quem esta acostumado e vem de linguagens como Java, C#, C++ ou alguma outra que a IDE disponibilize o recurso de autocompletar, acaba sentindo muita falta disso no Python, recurso que vemos em outras IDE’s sem ter que configurar nada como no Eclipse, Visual Studio, NetBeans e demais IDE’s, mas vamos ver como configurar este recurso no editor Vim e no próprio interpretador interativo do Python ;).

No caso para programar Python, assim como Perl e Shell Script uso o Vim, para configurar o autocomplete de sintaxes Python não tive tantas dificuldades visto que o procedimento é praticamente o mesmo para C, SQL e demais linguagens, você pode listar os arquivos de complete das linguagens no caminho abaixo:

cleiton@nb-bueno ~ $ ls -l /usr/share/vim/vim73/autoload/
adacomplete.vim
ada.vim
ccomplete.vim
csscomplete.vim
decada.vim
...
python3complete.vim
python.vim
rubycomplete.vim
spellfile.vim
sqlcomplete.vim
syntaxcomplete.vim
...

Para habilitar é muito fácil, primeiro que não vamos nem chegar perto do /etc/vim/vimrc, raros casos editei ele, onde eu prefiro criar um para cada perfil do meu usuário, e você pode fazer isso também.

cleiton@nb-bueno ~ $ touch ~/.vimrc

Vamos editar o .vimrc criado (pode usar o vim para editar :)), e adicione a seguinte linha.

autocmd Filetype python set omnifunc=pythoncomplete#Complete

O segredo é o omnifunc, onde especificamos um dos nomes listados  e que você procura em /usr/share/vim/vim73/autoload/, um adendo importante é que no vim73, o numero é de acordo com a versão do vim, no meu caso 7.3.

Agora criando um novo arquivo .py e editando com o vim, basta você começar a digitar e pressionar Ctrl+x e Ctrl+o que irá aparecer as opções para autocompletar, como na Figura 1, o atalho você pode trocar utilizando map, mas deve tomar cuidado se já não esta sendo usado, no caso o padrão é Ctrl+x e Ctrl+o

vim_configurado_autocomplete_python

 Figura 1 – Autocomplete Python no editor Vim

 Show! Até aqui maravilha, eu cheguei a resolver sem problemas, mas o que eu queria também é autocomplete no interpretador interativo do Python, isso mesmo, aquele que você digita apenas python no terminal e já sai programando e testando, e foi ae que para esta perguntar encontrei a resposta neste list, onde utilizando a variável PYTHONSTARTUP, que é lida antes de carregar o interpretador interativo, você pode passar algum comando, e no nosso caso será um arquivo, então vamos criar o arquivo.

cleiton@nb-bueno ~ $ touch ~/.pythonrc

Edite o arquivo usando Vim :) ou Nano, Gedit, Emacs :( e adicione as duas linhas abaixo:

import rlcompleter, readline
readline.parse_and_bind('tab:complete')

Para finalizar, vamos adicionar o arquivo .pythonrc a variavel PYTHONSTARTUP, e toda vez que iniciar um terminal sera inicializada esta variavel ao ambiente, então vamos adicionar a seguinte linha no ~/.bashrc

export PYTHONSTARTUP=~/.pythonrc

Salve e feche o arquivo, saia do terminal e abra novamente ou simplesmente digite:

cleiton@nb-bueno ~ $ source ~/.bashrc

Agora vamos executar o python e no import do sys. pressionar 2x tab, e logo em seguida, iniciando com sys.std e pressionar 2x tab e vamos ver a saída na Figura 2.

python_interrative_autocomplete

 Figura 2 – Interpretador interativo Python com autocomplete

Na primeira tentativa da pra ver todas as opções, funções e demais recursos para usar do modulo sys, logo em seguida em import sys.std(2x tab) podemos ver que temos stderr, stdin e stdout como opções.

Pra mim, agora com essas duas features para trabalhar com o Python, ficou muito bom, antes eu trabalhava com 3 ou 4 terminais, um programando, outro para executar o script, outra para pydoc de algum modulo e as vezes testar com python noutro terminal, desta maneira usando vim, autocompleta o que esquecer ou estiver em duvida, encontro o modulo que preciso, consigo uma previa do doc conforme vou listando as opções dos módulos, usando o vim posso chamar um shell e executar o código e em outro terminal deixar apenas para o python interativo para visualizar todas opções de um modulo ou usar pydoc ;)

Em um artigo futuro escreverei sobre o vim e os diversos atalhos e parâmetros de configuração que o tornam um excelente editor para varias linguagens, uso algumas configurações pré-definidas para programar C em Linux, vou escrever sobre isso ;)

Espero que tenham gostado e até a próxima!

 

Referências

http://conjurecode.com/enable-auto-complete-in-python-interpreter/
https://docs.python.org/2/using/cmdline.html#envvar-PYTHONSTARTUP

Share Button

CC BY-NC-SA 4.0 Python – Autocomplete no Python e Vim by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.