domingo, 6 de noviembre de 2011

Dos décadas productividad: 20 aniversario de Vim

Hace un tiempo les trajimos un recurso para aprender a utilizar el editor de textos Vim. Lo que sigue pueden entenderlo como un complemento, dado que es la historia de la creación del susodicho editor de textos. Si finalmente se decidieran a darle una probada, pueden encontrar una versión para Windows aquí. Solo se la descargan, la instalan y adelante, a probarlo. Antes lo hemos aclarado, pero ya pasó tiempo de eso así que aquí les va de nuevo (para los que llegaron hace poco). Hay ocasiones en las que enlazamos recursos externos que no están en español y básicamente lo hacemos por una de dos razones: la primera, porque no exista el recurso en español y preferimos ofrecerlo porque es mejor que nada y cuando menos les da un punto de partida.  La segunda es porque el recurso en español es desproporcionadamente mas pobre que el recurso en inglés, de modo que no vale la pena referenciar el primero y de nuevo, sigue siendo un punto de partida. Lo segundo, hay términos que no tiene sentido (o que son complicados) de traducir. En esos casos los dejamos como están o hacemos la indicación porque confunden (y las dos aclaraciones vienen a cuento porque este que sigue trae varios de esos). La página del proyecto Vim la pueden encontrar aquí. Listo, el original de este lo pueden encontrar aquí y la traducción es de Jorge. Es lunes, esperamos que les resulte interesante y quedamos hasta la próxima, provecho!

Dos décadas productividad: 20 aniversario de Vim 



El editor de texto Vim fue lanzado por primera vez al público el 2 de noviembre de 1991, hace exactamente hoy 20 años.. Aunque fue diseñado originalmente como un clon de  Vi para el Amiga, fue portado a otras plataformas y con el tiempo creció hasta convertirse en el editor de texto compatible con Vi más popular. Sigue siendo activamente desarrollado y utilizado ampliamente en varios sistemas operativos. 
En este artículo vamos a echar una breve mirada retrospectiva a la historia de vi y sus descendientes, que condujeron a la creación de Vim. También vamos a explorar algunas de las características técnicas atractivas que siguen haciendo a Vim relevante hoy en día.

Prehistoria 
El editor de textos Vi fue creado originalmente a fines de los '70 por Bill Joy, un desarrollador de BSD, que más tarde pasó a ser cofundador de Sun Microsystems. En su implementación original, Vi fue concebido como un modo interactivo "visual" para un editor de líneas similar a ed llamado ex. Fue desarrollado en un por primera vez en un viejo terminal ADM-3A, una década antes de  que los mouses se hicieran ubicuos. Los usuarios basan su interacción con el editor en comandos y navegación basada en el teclado. 
Las limitaciones y peculiaridades de la ADM-3A influyó en algunas de las características más distintivas de Vi. Por ejemplo, Vi fue programado para usar la h, j, k, y la l, como teclas direccionales para la navegación debido a que en el teclado de ADM-3A había flechas impresas en las teclas de esas letras. A pesar de que fue un accidente de la historia, el modelo de navegación hjkl en Vi demostró ser enormemente eficaz. La combinación de esas letras se ha convertido prácticamente en algo representativo para los usuarios de Vi. El esquema de navegación se utiliza hoy en día en una variedad de otras aplicaciones, incluyendo Gmail y el cliente oficial de Twitter para Mac OS X. 
El editor Vi se convirtió en una parte inseparable del paisaje de UNIX. Joy lo incorporó a BSD y AT&T hizo lo mismo para System V. La funcionalidad básica y el comportamiento de Vi se especificó después  en el estándar POSIX, lo que llevó a la inclusión del editor de texto en muchos de los principales sistemas UNIX. 
Los clones de Vi, que comenzaron a emerger a finales de los años 80 y principios de los 90, fueron ampliamente adoptados debido a licencias más permisivas. La implementación de Vi de Joy, se basó en la versión original de ed de AT&T, lo que significaba que el código no se podía redistribuir libremente. Sólo podía ser utilizado por quienes tenían una licencia Unix de AT&T. 
Los dos primeros clones destacados de Vi fueron Stevie y Elvis. Stevie, el Editor ST para fanáticos de Vi, fue originalmente desarrollado para el Atari ST en 1987 y adaptado a UNIX el año siguiente. Era un poco primitivo, pero atrajo a algunos seguidores. Elvis, el cual fue lanzado por primera vez en 1990, era más sofisticado y fue diseñado para ofrecer mayor funcionalidad. Elvis fue el primer clon de Vi que introdujo soporte para resaltar sintaxis. 
Aunque Elvis todavía tiene algunos usuarios y sigue siendo popular en la comunidad de Slackware, no ha visto una actualización importante desde 2003. Elvis reemplazó el Vi de Joy en los ports de BSD, pero los desarrolladores de BSD más tarde produjeron un nuevo clon llamado nvi que tenía la intención de coincidir más de cerca con el comportamiento de la aplicación de Joy. El editor nvi sigue siendo utilizado hoy por la familia de sistemas BSD.

Historia. 
La primera versión de Vim se desarrolló en el Amiga por Bram Moolenaar en 1988. Moolenaar no estaba satisfecho con los clones Vi que estaban disponibles para la plataforma Amiga y se dispuso a hacer uno que se fuera similar en cuanto a funcionalidades a Vi. Basó su nuevo editor en el Stevie, que  según el mismo Moolenaar,  era el mejor clon de Vi compatible con Amiga en ese momento. 
La primera versión de Vim que fue lanzada al público en general fue de la 1.14,  publicada el 2 de noviembre de 1991. Se distribuyó en el  Fish disk # 591, uno de los discos de la colección  freeware de Amiga de Fred Fish. Tras su lanzamiento al público los usuarios comenzaron su contribución con parches.

"...Hace mucho tiempo me conseguí un ordenador Amiga. Dado que yo usaba un Vi para la edición, miré a mi alrededor buscando un programa como Vi para el Amiga. Encontré unos pocos llamados "clones", pero ninguno de ellos era lo suficientemente bueno, así que tomé el mejor, y empecé a mejorarlo. Al principio, el principal objetivo era que fuera capaz de hacer todo lo que podía hacer Vi. Poco a poco fui añadiendo algunas características adicionales, como múltiples niveles de deshacer", escribió Moolenaar en el primer número de la Revista de Software Libre, en el año 2001. "Cuando empecé a trabajar en Vim  era sólo para mi propio uso. Después de algún tiempo tuve la impresión de que era útil para los demás, y lo envié al todo el mundo. Desde entonces estoy trabajando más y más en hacer que el programa trabaje mejor para la mayoría de los usuarios. Es divertido crear algo útil. Además, hay un buen grupo de co-autores y de usuarios avanzados, lo cual es muy inspirador.



Moolenaar redactó su propia licencia copyleft para el software. La licencia garantiza al usuario una amplia libertad para usar, distribuir, y reutilizar el código, pero le da al responsable (maintainer) del derecho de solicitar que las mejoras contribuyan de vuelta al proyecto. Algunas precisiones fueron añadidas a la licencia de Vim en la  versión 6.0 para asegurar la compatibilidad con la Licencia Pública General GNU (GPL).
Vim es un proyecto de software libre, pero también es charityware. Moolenaar ayudó a establecer una fundación llamada ICCF Holland que trabaja para apoyar a un centro para niños en Uganda. Él anima a los usuarios a considerar hacer una donación a ICCF Holland o el Fondo de Niños de Kibaale. Se desempeña como tesorero de la fundación y visita el sitio en Uganda casi todos los años para monitorear el progreso del centro. 

El nombre de "Vim" originalmente significaba Vi IMitation (imitación de Vi), pero más tarde se convirtió Vi IMproved (Vi mejorado). El nombre fue cambiado en 1992, cuando la versión 1.22 fue lanzada con nuevas características convincentes y un port para UNIX. Consiguió soporte para varios búferes en la versión 3.0, que fue lanzada en 1994. La versión 4.0 en 1996 introdujo una interfaz gráfica de usuario, la versión 5.0 en 1998 añadió capacidades para resaltar sintaxis, y la versión 6.0 en el año 2001 añadió soporte para dividir ventanas verticalmente y un sistema de plugins para simplificar la carga de script. 
Muchas otras características se han añadido a lo largo del camino. Vim ha sido portado a muchas plataformas, incluyendo Linux, BeOS, Windows, Mac OS X, y QNX. A pesar de que Vim fue originalmente diseñado para ser utilizado en un terminal, hay varias interfaces gráficas construidas con diversos kits de herramientas de interfaz de usuario que añaden menús convencionales, barras de herramientas y barras de desplazamiento. 
La última versión importante de Vim fue la versión 7, que fue lanzada en 2006. Introdujo algunas características especialmente importantes, incluyendo soporte nativo para la corrección ortográfica, un sistema de autocompletado, una interfaz de pestañas y una característica llamada undo branches (*). La mas reciente actualización de versiones menores fue la 7.3, lanzada el año pasado, que introdujo una característica de deshacer persistente y soporte para Python 3. 

Vim en la actualidad.
Debido a la popularidad de los clones, el nombre de Vi se ha convertido en un término general que se utiliza coloquialmente para describir a cualquier miembro de la familia de editores compatibles con Vi que son más o menos compatibles con las características que se especifican en el estándar POSIX . Hoy en día, los derivados directos del Vi de Joy se usan generalmente en sólo un puñado de entornos UNIX comerciales. Todos los sistemas modernos de BSD y Linux incluyen un clon en lugar del original. 
Las distribuciones de BSD en su mayor parte incluyen nvi, pero Mac OS X y la gran mayoría de los sistemas Linux vienen con Vim. En la mayoría de los casos, el comando Vi se ha configurado como un enlace simbólico que lanza directamente a Vim, o un script que inicia Vim con estricta compatibilidad con Vi. Si has utilizado el comando vi en un sistema Linux en cualquier momento en la última década, es muy probable que hayas usando Vim
A diferencia de los otros clones destacados de ViVim sigue siendo activamente desarrollado y tiene una gran base de contribuyentes. Las nuevas características están aún en desarrollo, y se añaden al editor cada año, por lo que es aún más potente. Moolenaar todavía sirve como responsable  principal y realiza una gran obra asegurándose que  los parches de los contribuyentes funcionen bien y se integren correctamente. 

¿Por qué la gente todavía utiliza Vim? 
La idea de utilizar un editor orientado a modo de comando  puede parecer un poco anacrónica, a primera vista, pero el rico conjunto de características de Vim y su amplia extensibilidad lo han hecho una elección permanente entre los usuarios avanzados de los ordenadores. Todavía es un editor muy popular, especialmente entre los programadores, desarrolladores web, los científicos y administradores de sistemas. 
El alcance completo de las ventajas de Vim es difícil de manejar para los usuarios que no están familiarizados con el editor. Aunque una explicación completa de cómo funciona Vim está fuera del alcance de este artículo, el siguiente es un pequeño surtido de las funciones más útiles:

  • Interfaz flexible de múltiples documentos: En Vim, sus archivos y documentos no guardados se les conoce como buffers. El editor le ofrece una enorme cantidad de posibilidades sobre como los buffers se muestran en la pantalla. Puede dividir la ventana horizontal y verticalmente tantas veces como desee para que pueda ver muchos búferes al mismo tiempo. Usted puede incluso tener el mismo buffer abierto en varias divisiones, lo que le permite ver las distintas partes de un mismo documento simultáneamente. Opcionalmente, también puede organizar conjuntos de diseños divididos en pestañas. El diseño y el estado pueden ser conservados guardando una "sesión" y la restaurándola más tarde. 
  • Edición modal con atajos de teclado sofisticados: Vim tiene modos diferentes de interacción para la introducción y edición de texto. El modo de inserción se comporta en gran medida como era de esperar un editor de texto --  los comandos son ejecutados con atajos del teclado convencionales y los caracteres se añaden al búfer a medida que se presiona las teclas asociadas. En el modo "normal", sin embargo, los comandos se ejecutan usando secuencias de pulsaciones de teclas. Los comandos más útiles le permiten navegar de forma rápida y manipular el texto en el búfer. Usted puede personalizar ampliamente el comportamiento de los enlaces para crear accesos directos personalizados y comandos. 
  • Múltiples portapapeles: En lugar del portapapeles convencional, Vim almacena el texto copiado con un mecanismo que se llama registros. Existe un registro por defecto que se utiliza para almacenar el texto que es copiado por el método estándar de poner y eliminar, pero el usuario también puede indicar un registro específico en el que desea almacenar el texto cuando corta o copia. Esto efectivamente actúa como un portapapeles multiplexado. El contenido de los registros se mantienen entre los usos de Vim, lo que significa que se conservan al salir y seguirán ahí cuando se abra el editor de nuevo. 
  • Macros: Vim tiene un sistema macro que le permite grabar las pulsaciones de teclas para su posterior reproducción. Las macros son trivialmente fáciles de crear desde el teclado y pueden consistir en operaciones a través de los múltiples modos de Vim. Las macros son almacenadas en los registros, al igual que los elementos del portapapeles. Como tal, también pueden persistir a través de los usos de la aplicación. 
  • Capacidades de búsqueda muy potentes: Vim tiene algunas herramientas muy sofisticadas para automatizar la búsqueda y reemplazo, incluyendo soporte para expresiones regulares. También tiene una versión integrada del comando grep, que se integra con  la enormemente conveniente característica de Vim, Quickfix, un buffer especial que te muestra una lista de resultados y le permite ir convenientemente entre ellos. 
  • Extensibilidad extremadamente rica: Vim es prodigiosamente orientado a scripts y muy propicio a la automatización. Tiene su propio lenguaje de programación nativo con tipos de contenedores, un modelo único de ámbito de variable, y un montón  funcionalidades específicas de Vim. También incorpora motores de scripting y enlaces que le permiten ser personalizadas a través de numerosos lenguajes de programación, incluyendo Perl, Python, Ruby, Tcl, y Lua. Vim también puede ser ampliado para añadir resaltado de sintaxis para otros idiomas o crear esquemas de color. Los usuarios comparten ampliamente sus scripts a través de diversos repositorios en línea y los empaquetan en plugins. Como hemos demostrado anteriormente, la instalación de algunos plugins y scripts sencillos pueden dar a Vim muchas de las capacidades avanzadas de un entorno de desarrollo integrado. 
  • Portabilidad: Vim funciona donde quiera que lo necesites. Es ampliamente utilizado en Windows, Linux y Mac OS X y está disponible para muchas otras plataformas. Los usuarios pueden ejecutarlo desde el terminal o utilizar una interfaz gráfica nativa en los tres sistemas operativos principales. Muchos administradores de sistemas valoran a  Vim porque les da un ambiente productivo de edición de texto en prácticamente cualquier sistema remoto de Linux o Mac OS X al que se acceda usando ssh a través de la terminal.
Conclusión 
Vim ha sido mi selección de editor desde 1998, un año después de que empecé a usar Linux como mi sistema operativo de escritorio principal. Lo he utilizado para escribir varios miles de artículos y muchas líneas de código. A pesar de que he experimentado con una gran cantidad de editores de texto convencionales modernos, no he encontrado ninguno que coincida con la eficiencia de Vim. Después de usar Vim casi todos los días durante tantos años, todavía estoy descubriendo nuevas características, capacidades y comportamientos útiles que mejoran aún más mi productividad. 
Vim ha envejecido bien en los últimos 20 años. No es sólo una antigua reliquia, el editor sigue siendo tan atractivo como siempre y sigue atrayendo a nuevos usuarios. La curva de aprendizaje es empinada, pero las ganancias de productividad bien vale la pena el esfuerzo. 
¿Recuerdas tu primera experiencia con ViVim? En honor del 20 aniversario del venerable editor de texto, comparte tus recuerdos y tus funciones favoritas en el hilo de discusión.


(*) Básicamente es una especie de deshacer por niveles, les permite deshacer ciertos cambios, luego hacer otros cambios y mantenerlos todos (los cambios) en un "árbol de deshacer" (undo tree en el original) ..... lo siento esta es uno de los términos que son bastante difíciles de traducir porque la traducción hace que pierda el sentido, en inglés se entiende mejor. Regresar