Enviar e-mail desde la consola

Si queremos que nuestro sistema pueda enviar correos electrónicos, debemos asegurarnos de que sendmail o algún otro MTA (Mail Transport Agent) esté configurado. O sea que empezamos ejecutando /etc/init.d/sendmail start, o /etc/rc.d/sendmail start, o service sendmail start, o lo que se corresponda a nuestra distribución GNU/Linux o sistema UNIX que estemos usando. Ahora ya podemos empezar.

Supongamos que estamos delante de una terminal y queremos enviar un mensaje a usuario@dominio.com, la forma más simple es la siguiente, ejecutamos

$ mail usuario@domunio.com

Ahora nos sale lo siguiente:

Subject: Título del mensaje <enter>
Empieza el texto del mensaje, y <enter>
sigue el texto hasta que <enter>
finalmente terminamos y <enter>
escribimos un punto <enter>
. <enter>
Cc: <enter>

Y el mensaje ya se ha enviado a usuario@dominio.com con el título indicado y el mensaje que hemos escrito. Como véis podemos añadir destinatarios adicionales en el campo Cc (Carbon Copy).

Pero, ¿y si queremos mandar un correo sin tener que interactuar en tiempo de envío, por ejemplo para mandar correos desde nuestros propios scripts? Pues todo lo que hemos visto se puede hacer por parámetros:

$ mail -s "Título del mensaje" usuario@dominio.com < /ruta/archivodetexto.txt

En el caso que hemos visto, el texto del mensaje lo recuperamos de un archivo de texto plano ASCII que se llama archivodetexto.txt y se encuentra en /ruta/, pero también podríamos incluir el propio cuerpo del correo en el comando si usamos una tubería:

$ echo "contenido del mensaje" | mail -s "Título del mensaje" usuario@dominio.com usuario4@dominio.com

Además vemos que podemos enviar el mensaje a distintos destinatarios. Pero ¿y si queremos enviar documentos adjuntos? El comando mail, que yo sepa, no puede hacerlo. Para ello podemos recurrir a mutt, un cliente de correo electrónico muy capaz y que posee una interface TUI (Text User Interface). Sin aprofundir en las capacidades de mutt, que son muchas, en este caso podríamos hacer lo siguiente:

$ mutt -s "Título del mensaje" -a /ruta/documento.pdf usuario@dominio.com < /ruta/archivodetexto.txt

En este caso, el usuario que posee el correo electrónico usuario@dominio.com recibirá un correo titulado “Título del mensaje”, el texto de este correo será el contenido de archivodetexto.txt, y se incluirá un PDF, documendo.pdf como archivo adjunto.

Voilà.

Gnuffy: Arch Linux sin estructuras jerárquicas

En el último artículo mencioné a Gnuffy como uno de los proyectos basados en Arch Linux que me habían parecido interesantes o destacables por algún motivo. La semana pasada estuve haciendo una instalación de esta nueva distribución y puedo asegurar que lo que en ella ví me gustó bastante, y es por eso que he querido escribir algo al respecto. Pero antes que nada hablemos un poco de Gnuffy y sus diferencias con su madre Arch Linux.

Arch Linux es una distribución que se soporta gracias a su propia comunidad, no hay ninguna empresa ni fundación detrás de ella. Pero aún así tiene ciertas estructuras jerárquicas que se siguen para el mantenimiento de los repositorios y el desarrollo de los programas de los cuales Arch depende. Si nos imaginamos esto como la típica pirámide, arriba del todo está el líder del proyecto. La historia de Gnuffy es la del intento de crear algo que funcione sin esta estructura, con la comunidad como base absoluta, para entender el concepto hablaré primero del funcionamiento interno de Arch, para describir luego el funcionamiento de Gnuffy.

En Arch Linux no hay ningún sistema democrático para elegir al “presidente” ni nada por el estilo como pasa en Debian, simplemente Judd Vinet creó esta distribución hace años y se formó una comunidad a su alrededor, pero cuando no pudo seguir con el proyeco le pasó los mandos a Aaron Griffin, miembro activo de la comunidad dispuesto a asumir el papel.

Esta persona es quien posee el Copyright de la distribución y quén tiene la última palabra sobre el rumbo que esta toma. Pero no está sola, pues pertenece a un grupo mayor de desarrolladores, entre 30 y 40, que són quienes mantienen los repositorios [core] y [extra], así como el gestor de paquetes pacman, el CD/USB de instalación, los initscripts, el gestor de conexiones netcfg, el sistema abs, la página web, etc.

Y entonces quién mantiene el repositorio [community]? Pues los TU o Trusted Users, personas activas en la comunidad de Arch Linux que han demostrado previamente en AUR que son buenos creando y manteniendo los PKGBUILDS necesarios para crear paquetes de software para esta distribución. En estos momentos hay unos 30 TUs.

Pero la verdadera comunidad de Arch Linux está en AUR, el lugar donde cualquiera puede colgar sus PKGBUILDS hechos en casa y donde cualquiera puede descargarlos. Resumiendo, la jerarquía en la comunidad de Arch se basa en la calidad y la confianza: si eres bueno participando en AUR puedes llegar a ser TU y mantener paquetes en [community]; si destacas como TU eres un buen candidato a desarrollador, etc.

Por lo que yo sé, no hay más estructuras que estas, pero aquí la gente de Gnuffy plantea un paso más: eliminar todo esto completamente y construir una distribución basada en Arch Linux y que no necesite nada de esto, donde todos podamos subir paquetes o PKGBUILDS y que cualquier usuario pueda usarlos sin el paso previo de AUR, pues nuestro gestor de paquetes (que ya no es pacman sinó spaceman) tiene acceso a todo lo que la comunidad hace sin importar si eres un novato o un experto mantenedor del paquete del kernel.

En Gnuffy no podemos activar y desactivar repositorios de software porque no hace falta. Si intentamos instalar un paquete con spaceman, este nos muestra una lista de los repositorios que lo tienen disponible, en esta lista puede estar [arch-core] como puede estar [aur], [my_new_repo], etc. Si tú acabas de crear un repositorio (no importa si es de paquetes precompilados o de PKGBUILDS) yo tengo acceso a él, si tú has creado un paquete que necesito tengo la opción de usar tu repositorio. No hay más, pues el sistema está completamente centralizado.

Como véis, Gnuffy puede usar los repositorios oficiales de Arch Linux y, por lo tanto, puedes obtener un sistema casi igual a Arch Linux, pero deja puertas abiertas donde Arch las deja cerradas.

Pero ¿cómo podemos saber si un repositorio es confiable? Pues porqué spaceman posee algo de lo que pacman carece: soporte para firmar los paquetes, o sea seguridad. Es por esto que spaceman depende de gpg. Cuando spaceman nos dá a elegir entre diversos repositorios para descargar el paquete que le hemos pedido, éste nos avisa de la firma y hace la comprobación. Además podemos configurar spaceman para que confíe en ciertos repositorios y desconfíe de otros. La idea principal es que confiemos como mímnimo en los repositorios [arch-core], [arch-extra] y [arch-community] aunque vengan sin firmar (a ver si esto mejora en el futuro), también en los repositorios de los desarroladores de Gnuffy y spaceman como [blackpenguin] y otros. Ante cualquier duda spaceman nos pregunta si queremos confiar o desconfiar de un repositorio a partir de ese momento.

Gnuffy no tiene instalador, pero si queréis podéis crear un sistema usable a partir de un LiveCD si descargáis spaceman y seguís las instrucciones de la wiki del proyecto (evidentemente hace falta una partición libre en el disco para hacerlo de este modo). O podéis usar el script Arch2Gnuffy, que “convierte” vuestro sistema Arch Linux en un sistema Gnuffy con spaceman. Yo no he pobado este script, usé GRML como LiveCD para la instalación.

Personalmente lo que he hecho es sólo trastear un par de horas, no le hecho ningún análisis serio y profundo, pero puedo asegurar que me ha gustado lo que he visto de momento. La interfície tipo ncurses que posee spaceman és muy agradable de usar, ¡te vienen unas ganas tremendas de instalar de todo! Le seguiré la pista a esta nueva distribución, a ver si va mejorando y su comunidad crece y se complementa con la de Arch Linux.

Arch Linux como base

Los que seguís este humilde blog desde hace tiempo sabéis que soy usuario convencido de Arch Linux desde hace casi tres años. Aquí he hablado un montón de veces sobre las características que hacen de Arch una distribución única y extremadamente adaptable a casi cualquier ámbito.

En este artículo no voy a tratar temas técnicos, más bien intenta ser un análisis sobre el estado de Arch Linux y, más concretamente, voy a plantear una pregunta que llevo demasiado tiempo haciéndome: Partiendo de la idea de que Arch Linux és adaptable, modular, estable, siempre actualizada, posee una comunidad envidiable… ¿porqué no hay más y mejores proyectos basados en Arch Linux?

En estos tres años he visto nacer grandes proyectos que usaban Arch como base, quizás los más destacables sean KDEMod (un repositorio no oficial de KDE que es usado por un gran porcentaje de usuarios de Arch Linux), larch (un sistema para crear un LiveCD/USB a medida – usado por distribuciones como FaunOS), el nuevo proyecto Chakra (LiveCD/instalador de Arch basado en KDEMod 4), y recientemente Gnuffy (distribución enfocada a comunidad, sin estructuras jerárquicas en su modelo de desarrollo y en la creación de repositorios).

Podría haber mencionado otros proyectos basados en la que muchos consideramos la distribución GNU/Linux perfecta, como por ejemplo LiveCDs especializados en un tema concreto (juegos, multimedia), repositorios de software adicionales mantenidos por la comunidad (con paquetes de audio, versiones de desarrollo, etc)  y cosas por el estilo. Pero en primer lugar, esto lo tienen todas las distribuciones madre, y en segundo, me parece que los ejemplos que he puesto arriba son todos buenos y únicos.

Algunos se preguntarán: si tan perfecta es Arch… ¿para qué quieres proyectos derivados o basados en ella? Este tipo de respuestas normalmente viene dado por gente que no se ha planteado a fondo lo que és el software libre y lo que significa a nivel práctico.

Cuando Canocical publicó su primera versión de Ubuntu en 2004, esta no sólo estaba basada en Debian como ahora, sinó que no se desviaba excesivamente de esta primera. Ha sido con el tiempo que Ubuntu ha ido creándose una reputación y ha conseguido una personalidad propia. Debian, su distribución madre, es simplemente la que le proporciona las herramientas para su funcionamiento y el origen de los paquetes, que no es poco. Pero al fin y al cabo són cosas que al usuario final le importan una mierda, y es normal. Y lo más importante a tener en cuenta es que si Canonical se decantó por Debian no fué sólo por su contrato social ni por motivos técnicos. Fué además porque había una base de gente que usaba Debian y que estaba preparada técnicamente para ayudar al novato, el usuario potencial de Ubuntu en ese momento.

Lo que Debian és a Ubuntu no es nada malo, es estupendo. Y no quita importancia al proyecto Debian en sí mismo ni lo hace peor ni mejor que Ubuntu. Ésta es la base del software libre, y el que no lo vea así es porque simplemente no le importa lo más mínimo si el software que usa es libre o no lo és.

Como usuario de Arch Linux tengo dos cosas muy claras: la primera es que esta distribución no está pensada para un usuario doméstico sin conocimientos de GNU/Linux y que no sepa moverse con fluidez por una línea de comandos; pero la segunda es que, técnicamente hablando, Arch Linux puede ser tomada como base (usando o no sus mismos repositorios de paquetes) para crear distribuciones fáciles de instalar, configurar y usar, y éstas poseerán todas sus ventajas de bajo nivel: rolling release, optimización para procesadores i686/x86_64, y lo mejor de todo: unas entrañas simples y claras (keep it simple stupid). El tiempo dirá si esta magnífica distribución puede ser tomada como base para algo grande o estará destinada a seguir siendo una herramienta para geeks.

Seguimiento de un proceso con watch

Me parece increíble descubrir un comando tan útil y sencillo como watch a estas alturas. Y me pregunto seriamente: ¿cómo es posible que haya estado usando sistemas tipo UNIX durante 4 o 5 años sin conocerlo?

El comando watch ejecuta repetidamente el comando que le pasemos por parámetro, mostrando su salida en pantalla (salida estándar).

Esta mañana he estado moviendo archivos entre servidores, hablamos de mucha información, gigas y gigas. El servidor origen se ha quedado obsoleto y con el disco lleno, el servidor destino tiene 4 discos de 300 GB. Pero al pasar información, puedes llenar un disco sin darte cuenta, por lo que yo estaba ejecutando repetidamente

$ df -h

o más bien [flecha arriba + intro] hasta que watch se ha crucado en mi camino. Entonces he descubiertoque escribiendo

$ watch df -h

se nos muestra esta información (la salida de df -h) por pantalla:

Every 2,0s: df -h             Mon Jan  5 11:21:06 2009

S.ficheros          Tamao Usado  Disp Uso% Montado en
/dev/hda1              15G  2,8G   11G  21% /
/dev/hda3             274G  104G  156G  40% /mnt/disc1
/dev/hdb1             294G  191M  279G   1% /mnt/disc2
/dev/hdc1             294G  191M  279G   1% /mnt/disc3
/dev/hdd1             294G  191M  279G   1% /mnt/disc4
tmpfs                 379M     0  379M   0% /dev/shm

Por defecto se ejecuta cada 2 segundos, pero esto puede modificarse con el parámetro -n:

$ watch -n <número de segundos> <comando a ejecutar>

Otro parámetro curioso es -d, que remarca visualmente las modificaciones (con negrita o color de fondo) para que el seguimiento sea mas fácil.

Extraer parte de un archivo tar

Llevo años usando TAR (junto con Gzip o con Bzip2) para empaquetar y comprimir directorios, pero de repente empiezo a usarlo para crear copias de seguridad de forma manual y me doy cuenta de que no sé como extraer sólo parte de los archivos que he empaquetado.

No escribiré aquí como comprimir y descomprimir en *.tar.gz o en *.tar.bz2 (aunque tampoco tiene mucho secreto). Supongamos que tenemos esta estructura de directorios y archivos:

directorio/
|-- subdirectorio-1
|   |-- archivo-11.txt
|   `-- archivo-12.dat
|-- subdirectorio-2
|   `-- archivo-20.ogg
`-- subdirectorio-3

Hemos creado un archivo TAR que contiene este árbol, y lo hemos guardado con el nombre directorio.tar, Posteriormente queremos mostrar el contenido de ese archivo *.tar, lo hacemos de la siguiente forma:

$ tar tvf directorio.tar
drwxr-xr-x usuario/grupo   0 2008-12-05 16:51 directorio/
drwxr-xr-x usuario/grupo   0 2008-12-05 16:51 directorio/subdirectorio-3/
drwxr-xr-x usuario/grupo   0 2008-12-05 16:52 directorio/subdirectorio-1/
-rw-r--r-- usuario/grupo   0 2008-12-05 16:51 directorio/subdirectorio-1/archivo-11.txt
-rw-r--r-- usuario/grupo   0 2008-12-05 16:51 directorio/subdirectorio-1/archivo-12.dat
drwxr-xr-x usuario/grupo   0 2008-12-05 16:52 directorio/subdirectorio-2/
-rw-r--r-- usuario/grupo   0 2008-12-05 16:52 directorio/subdirectorio-2/archivo-20.ogg

Y finalmente, si lo que queremos realmente es extraer sólo uno de los subdirectorios, haremos lo siguiente:

$ tar xvf directorio.tar directorio/subdirectorio-1
directorio/subdirectorio-1/
directorio/subdirectorio-1/archivo-11.txt
directorio/subdirectorio-1/archivo-12.dat

En este caso hemos extraido un subdirectorio entero, pero podemos extraer archivos concretos, además podemos usar wildcards como * o ? en el comando.

¿Y que pasa con los archivos comprimidos con Gzip o con Bzip2? Pues los comandos son prácticamente los mismos, sólo tenemos que añadir la letra z en caso de *.tar.gz o la letra j en el caso de *.tar.bz2.

Arch Linux 2008.06 Overlord

Después de casi 9 meses de la última revisión de la versión Don’t Panic, hoy sale definitivamente esta nueva snapshot de mi distribución GNU/Linux favorita… Arch Linux. Esta nueva versión es la 2008.06 Overlord y puede descargarse desde aquí.

Logo Arch Linux

Aprovecho para recordar que en realidad la noticia no es nada interesante para los que ya usamos Arch Linux, porque como ya comenté en otro artículo esta distribución no tiene ciclo de versiones como la gran mayoría de distribuciones, sinó que hay una sola rama que el usuario va actualizando de vez en cuando (diariamente, semanalmente, da igual), a esto se le llama rolling release. Con lo cual lo que aquí anuncio es simplemente la nueva ISO para instalar la snapshot de cómo es Arch Linux hoy. Seguidamente usamos el comando pacman -Syu para dejar atrás la release y sincronizar con current. En otras palabras, sólo existe la rama current, aunque no exista como tal. Todos los usuarios de Arch tenemos el sistema actualizado al dia, no importa si nos lo hemos instalado hoy mismo o 3 años atrás mientras lo hayamos ido actualizando. Esto evita las arriesgadas actualizaciones entre distintas ramas de una distribución cuando pasan meses entre versión y versión. Y también nos beneficia para poder usar los programas poco después de su salida, sin tener que esperar a que se incluyan en la siguiente versión de nuestra distribución.

¿Cada cuándo sale una ISO para instalar Arch Linux? La idea era que dependía de las versiones del kernel Linux (a nueva rama del kernel, nueva iso de Arch), aunque esta vez han tardado mucho más y el kernel que se incluye es el 2.6.25.6, saltándose así las ramas x.23 y x.24, aunque han salido ISOs no oficiales para estas. Evidentemente el kernel se va actualizando con sus correcciones dentro de la rama correspondiente.

¿Qué significan entonces los números de versión? Antes se usaba una numeración incremental típica, pero ahora se usa ésta que es más descriptiva: el primer número corresponde al año de salida y el segundo al mes. En este caso significa Junio de 2008, otras distribuciones usan sistemas muy similares.

¿Y… qué hay de nuevo? Lo de siempre, pero más actualizado, se estrena nuevo logotipo para la distribución, se incluye el kernel 2.6.25, ahora el CD de instalación es un live Arch Linux, se añade imagen para usar discos USB como instalador, etc. Y otras cosas que ya estaban pero que no está de más recordar, como una buena autodetección de hardware, soporte para RAID, LVM2 y sistemas de ficheros cifrados desde la raiz del sistema… y lo típico que podemos encontrar en cualquier distribución, pero actualizado hasta puntos sorprendentes.

¿Cómo funcionará Arch Linux en mi hardware? Arch está optimizada para máquinas i686 (Pentium II o posterior) y x86_64 (AMD64, Core 2 Duo, etc), lo cual significa que la hace mucho más rápida que otras distribuciones optimizadas para i386, i486, etc (que son la mayoría). También hay ports no oficiales para i586 y PowerPC (antiguos Apple).

¿Cuál és la filosofía de Arch? Básicamente… que las cosas sean simples (recordemos que simple no significa fácil), el conocido KISS (Keep It Simple Stupid) es el pilar que sostiene cualquier detalle en Arch Linux. Los paquetes que se distribuyen en Arch Linux, generalmente no se parchean demasiado si no es muy necesario.

¿A qué perfil de usuario está destinada esta distribución? Cualquiera con ganas de aprender y sin miedo a usar la línea de comandos para configurar cualquier cosa, ya que Arch Linux no incluye ningún tipo de interfaz gráfica para configurar el sistema, ni siquiera interfaz gráfica de texto (TUI). Esto es verdad excepto en el instalador, que tiene un menú de interfaz de texto, el típico instalador ncurses cómo en *BSD, Slackware, etc. De todas formas al terminar la instalación se nos va a pedir que editemos a mano (usando vim o nano) los ficheros de configuración del sistema. El instalador no habrá configurado nada (sólo instala el sistema base y el cargador de arranque), por lo que hay que saber un poco lo que se está haciendo en el momento de editar los ficheros. Arch incluye un sistema de instalación de paquetes llamado pacman que es parecido al apt-get de Debian y otros similares, pero también incluye el sistema ABS (Arch Build System) para compilar los paquetes y la base del sistema (y/o modificarlos a nuestro gusto sin demasiada dificultad, así como crear paquetes propios de una forma muy simple). Esto puede sonar parecido a los ports de *BSD y al portage de Gentoo. Por lo tanto, los usuarios que se pueden sentir cómodos con Arch Linux són los mismos que se han sentido cómodos usando Gentoo, Slackware, Debian o algún *BSD.

¿Voy a encontrar ayuda en la comunidad ante mis dudas de principiante inútil? ¡Por supuesto! Aunque pueda parecer que no hay una gran comunidad de usuarios, debido básicamente a que Arch Linux no es una distribución de las más conocidas, lo cierto es que sorprende lo fácil que es encontrar ayuda cuando quieres aprender a usar algo, o cuando las cosas van mal. Tienes a tu disposición un wiki, la guia de instalación, foros (inglés y español), listas de correo, canales en irc.freenode.net, etc.

¿Tienes curiosidad? Estos enlaces pueden ser de tu interés:

He pagado una licencia privativa de software

Recientemente he adquirido un software privativo, y lo he pagado. No es la primera vez que hago esto, al comprar el portátil hice lo mismo con Windows Vista. La novedad es que esta vez lo he hecho voluntariamente y por un software que sí voy a usar.

Se trata de LSDJ, un tracker para la consola Game Boy con el que poder hacer música. Estuve probando la versión demo de este software en el emulador VisualBoyAdvance en GNU/Linux y me ha convencido lo suficiente como para hacerme con un cartucho, previo pago de la versión ROM via PayPal. Me ha dolido mucho tener que abrirme una cuenta en PayPal para comprar esto, pero era la única forma.

LSDJ

Aun tratándose de una licencia privativa (el uso es personal e intransferible), me parece bien que el precio sea la voluntad, que sea una licencia de por vida incluyendo futuras versiones de LSDJ. También me parece bien que ofrezcan gratuitamente una versión demo (aunque esté algo anticuada y no se pueden grabar las canciones). La licencia dice literalmente lo siguiente:

LICENSE NOTE

You are hereby granted a personal, non-assignable lifetime
license to download and use Little Sound Dj.

Spread the demo version – not the full version!

Por cierto, si alguien tiene una Game Boy antigua que no use, lo hablamos. Lo mismo para accesorios: cable link, lupa con luz, cargado de corriente, etc. Ya veremos la música que sale de esto.

Trucos básicos usando el editor Vim

vim logoPersonalmente uso kate o kwrite como editor simple, para tomar pequeñas notas, etc. Pero para programar o editar ficheros de configuración del sistema no dudo en usar VIM. No voy a profundizar en el uso de este editor, si no te suena de nada el nombre probablemente este artículo no te interese en absoluto. El hecho es que VIM, o cualquiera de los clones de vi, es un editor muy potente. Al contario de lo que parece a simple vista.

Mucha gente usa vi sólo cuando es estrictamente necesario, y de hecho es comprensible, tener un editor que funcione en modo texto puede ser de mucha utilidad si no funciona el entorno gráfico, o si editas ficheros de otro ordenador remotamente. Este artículo va destinado a aquella gente que ya usa VIM, pero no se ha leido la documentación ni la ayuda. Quiero insistir en que esto que voy a describir es MUY BÁSICO, este editor puede hacer muchísimo más. Avisados estáis… empezamos:

Cambiar de modo

Pulsando la tecla <i> entramos en el modo de inserción (para editar el texto), pulsando la tecla <ESC> entramos en el modo comandos, si estando en modo comandos escrivimos <:> (dos puntos), entramos en el modo línea de comandos de VIM, en él podemos hacer cosas más complejas.

Guardar, Salir, etc

Vamos a guardar el archivo:

:w

Como véis, la orden empieza por <:>, por lo tanto, primero hemos pulsado <ESC> para entrar en modo comandos. Si queremos darle otro nombre al archivo:

:w nuevo_nombre.txt

Para salir del editor:

:q

Si hemos hecho cambios no nos deja salir, aquí tenemos dos opciones, la primera es salir sin guardar:

:q!

La segunda es guardar, antes lo hemos hecho con <:w>, pero podríamos guardar y salir en un solo comando:

:wq

E incluso hay otro comando que hace lo mismo, pero no sobreescribe el archivo si no hay cambios, este es el más comodo para salir guardando cambios:

 :x 

Borrar en modo comando:

Ahora estamos en modo comando (tecla <ESC>), sin usar los dos puntos <:>. Si queremos eliminar el siguiente carácter debajo del cursor podemos pulsar x, con X eliminaríamos en anterior. Si pulsamos dd eliminamos la línea actual entera. Con dw eliminamos todos los caracteres hasta el final de la palabra actual, si estamos en un espacio en blanco, hemos eliminado la siguiente palabra del texto. ¿Con d3w que hacemos? El propio comando lo dice: delete 3 words. Con 5dd eliminamos 5 líneas enteras. Y por aquí va el asunto, la gracia está en aprender a combinar los comandos entre ellos.

Deshacer:

Si pulsamos la letra u deshacemos lo último que hemos hecho. Si pulsamos u repetidamente vamos retrocediendo. Con U afectaría solo a la línea actual.

Repetir:

Con el carácter . (punto) se repite el último comando realizado, sea cual sea.

Copiar, Cortar y Pegar:

¿He dicho que d elimina? Pues es completamente falso. Todo lo que eliminamos con d, dd, dw, etc se guarda en un buffer. Esto sirve, por ejemplo, para que usemos u para deshacer como acabo de explicar, pero también nos permite pegar el contenido eliminado, lo que popularmente se conoce como Cortar y Pegar. El comando y funciona igual que d, pero a diferencia de este último, guarda el contenido en el buffer sin eliminarlo, por lo que es un qeuivalente al típico Copiar: yy copia la línea actual, yw copia una palabra, 10yy copia un bloque de 5 líneas de texto, etc.

Ahora que hemos puesto información en el buffer, ya sea eliminada con d o copiada con y, sólo tenemos que pulsar p para Pegar.

Buscar cadenas de texto:

Si en modo comando (tecla <ESC>) escribimos:

/palabra

Y pulsamos enter, el editor buscará palabra en el texto y lo marcará para que lo veamos. Con la letra n se repite la búsqueda hacia adelante, con la letra N se repite hacia atrás.

Además, si pulsamos el asterisco * en modo comando en cualquier momento, se remarcarán todas las coincidencias con la palabra actual debajo del cursor.

Para programadores:

La función de autocompletado es quizás la más destacada, todos los IDEs de programación lo soportan, pues VIM también. Empezamos a escribir una función y pulsamos Control + n, se despliega una lista de todas las funciones que empiezan igual.

Otro truco muy útil es el salto hacia adelante y hacia atrás entre bloques de programación. Si nuestro lenguaje define estos bloques con { … } o ( … ) por ejemplo, nos podemos situar encima de un inicio de bloque, el carácter {, luego pulsamos % y nuestro cursor salta directamente hacia el carácter } más cercano. Si volvemos a pulsar % haremos lógicamente el salto hacia atrás.

Si en modo comandos escribimos ! (exclamación), podemos ejecutar comandos de shell dentro de VIM, al terminar la ejecución en shell volvemos al estado de editor.

El comando definitivo:

Espero que este artículo le sea útil a alguien, de todas formas hay un comando que supera a todos los demás. Por eso lo he reservado hasta el final:

:help

Con el comando <:help> entramos en la ayuda de VIM, que consta de un tutorial muy completo, de estos de seguir paso a paso. Esto es la mejor forma de aprender a usar este magnífico editor de texto.