Vim con shell integrada

Seguimos con configuraciones que hacen de Vim, en mi opinión, un potente IDE. El de hoy es un truquito que permite integrar una terminal dentro de un buffer Vim. Así podréis teclear lo que queráis en uno de los buffers (el superior, por ejemplo) y en el inferior tener abierto el intérprete Bash 🙂 Podéis ver el resultado en la imagen adjunta. Así no tendréis que hacer uso de GNU-Screen o similares.

El procedimiento es sencillo. Basta con instalar el plugin Conque Shell. Y la instalación es de lo más sencillo. Descarga de la URL anterior el fichero Conque Shell.vba (es un archivo Vim Ball, un formato estándar para plugins Vim). Ábrelo en Vim (o en GVim) y teclea

:so %

¡Listo! Ya está instalado el plugin 🙂 Para abrir una nueva shell Bash en la ventana inferior, teclea:

:ConqueTermSplit bash

Hay más comandos y configuraciones Conque que puedes ver en la web del plugin.

Vim: F3 compilar, F4 ejecutar

Para desarrollo uso indistintamente como IDE Eclipse (un verdadero IDE, al que una vez que te acostumbras ya es difícil dejarlo) y Vim. Alguien podría decir que Vim no puede ser considerado un IDE… tal vez sea así, pero desde luego teniendo en cuenta todas las ayudas que ofrece para el desarrollador (ctags, autocompletamiento, gestión de archivos, múltiples buffers en una única ventana, pestañas, code-beautifiers, code-folding, marcadores, plugins…) la frontera entre ser un simple editor de texto y/o un completo IDE de desarrollo cada vez es más difusa. Intentaré comentar en distintos posts algunas de las características que hacen de Vim, en mi opinión, un potente entorno de desarrollo (a costa de tener que aprenderse múltiples comandos y combinaciones de teclas así como de tener un interfaz «bastante» austero, cosa que a veces es bueno y nos permite centrarnos en nuestro código sin distracciones).

Para empezar un sencillo «truco» que permite asignar a la tecla F3 la orden de compilar el código de un programa C, y a la tecla F4 ejecutarlo, todo ello sin abandonar Vim (antes tenía que tener otra ventana abierta, guardar en Vim, compilar en la otra ventana con gcc y ejecutar, en su caso, para volver a la ventana Vim a seguir editando, un tostón vaya). A la chicha: ¿cómo hacer la asignación de teclas? Basta con que en tu archivo $HOME/.vimrc guardes lo siguiente:

map <F3> : call CompileGcc()<CR>
func! CompileGcc()
  exec "w"
  exec "!gcc % -o %<"
endfunc
 
map <F4> :call CompileRunGcc()<CR>
func! CompileRunGcc()
  exec "w"
  exec "!gcc % -o %<"
  exec "! ./%<"
endfunc

Tip: ajusta el esquema de colores de Vim

¿Te gustan los colores que usan en alguno de los siguientes pantallazos de Vim? (pulsa sobre el screenshot para ver más detalles)

¿Quieres elegir alguno de los 428 esquemas de color para VIM pero te gustaría ver antes una vista preliminar? Bien, en Vim Color Scheme Test tienes justo eso: vistas preliminares de cómo quedaría tu pantalla si aplicaras los esquemas de color indicados.

Dos notas:
a) hay que aplicarlos sobre vim con interfaz GTK+ (es decir, gvim) o de otro modo, los colores que veas no se parecerán en nada a los de la vista preliminar.
b) Para aplicar un esquema de color, basta con que lo descargues en la carpeta ~/.vim/colors y desde VIM lo selecciones con el comando :colorscheme nombreDelEsquema

BTW, el que yo uso es darkburn.

Vim y GNU Screen

Imagen tomada de la Wikipedia En el artículo anterior ya hablé de GNU Screen, un multiplexor de terminales. Qué bien queda ese nombre 🙂 Realmente significa que puedes trocear una terminal, dentro de una ventana, en otras n terminales. ¿Para qué puede servir ésto? Yo encontré esta utilidad a partir de una necesidad: abrir Vim y una terminal en la misma ventana. Es decir, en la parte superior de la ventana quería tener Vim y en la parte inferior una terminal con bash. Alguien podría decir que eso mismo se puede hacer abriendo dos ventanas. Cierto, pero noto mayor integración y aprovechamiento del espacio en pantalla con una sola ventana y una terminal multiplexada en dos (aparte de que con screen puedes hacer muchas otras cosas, como suspender una sesión desde un ordenador y retomarla desde otro ! ).

¿Cómo partir la terminal en dos para que quede tal y como se ve en la figura?
1) Desde la consola, iniciamos screen

$ screen

2) Lanzamos vim

3) Entramos en modo comando (dentro de screen se hace pulsando Ctrl+a , y tecleando luego «:split»

4) Pasamos a la nueva «terminal» o «ventana» inferior, pulsando Ctrl+a y luego TAB (tabulador). Esta combinación de teclas nos permite pasar de una ventana a otra.

5) En la terminal multiplexada inferior, pulsamos Ctrl+a y luego c (mnemotécnico: «c» de Create) para crear una nueva sesión bash.

Dar formato al código de un programa en VIM

Receta rápida para darle formato al código en VIM (el lenguaje: cualquiera de los soportados por VIM, o sea, legión):

Ejemplo en PHP; indicamos el tipo de archivo:
:set filetype=php

Marcamos todo el texto y le damos formato, pulsando ESCgg=G

ESC –> Modo comando
gg –> saltar a la primera línea
= –> formatear el código
G –> hasta la última línea