miércoles, febrero 06, 2008

Autocompletación en VIM

Por si acaso alguien todavía no lo sabe: vim autocompleta. Y debido que lo puedo usar desde terminales remotos, en un editor que arranca en un segundo, no necesito cosas como Eclipse, donde necesito un ambiente gráfico y 5 minutos para comenzar a editar cualquier cosa.

Para autocompletar por contexto edite un archivo y agregue:
sub factorial {
my $n = shift;
return 1 if $n <= 1; return f
y mientras el cursor está todavía al lado de la f (en modo de inserción), pulse CTRL-N y vim completará el la palabra, Vim busca en el archivo actual por palabras que comienzan con el prefijo indicado, y si hay mas de una, abre una persiana de selección.

Con la sintaxis activada (:syntax on) y en modo Perl también busca palabras para autocompletar en todos los módulos que se han usado, supongo que hará lo mismo con python, ruby, etc.

Si quiere autocompletación sobre el lenguaje, puede agregar a su .vimrc, las funciones correspondientes para el lenguaje, a mi me resulta cómoda la ayuda para CSS:
  autocmd FileType css set omnifunc=csscomplete#CompleteCSS
Luego en un archivo CSS, al tipear:
.miclase {
text
seguido inmediatamente de CTRL-X CTRL-O, mostrará las opciones correspondientes, que se pueden seleccionar con las flechas de dirección.

Hay toda una variedad de lenguajes en los que podemos autocompletar:
  autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType c set omnifunc=ccomplete#Complete
autocmd FileType cpp set omnifunc=ccomplete#Complete
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType perl setlocal expandtab ts=4
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType sgml set omnifunc=xmlcomplete#CompleteTags

Esos son los que vienen de cajita en Debian, pero como todo en vim, eso es programable, si necesitan un lenguaje nuevo se pueden hacer la definición, que debe ser similar al archivo que define las palabras de perl.