¿De dónde viene #Vim? La historia de este gran editor

Veamos la historia que hay detrás del editor Vim y cómo este ha llegado a ser lo que es hoy

¿Te has preguntado alguna vez por qué para salir de Vim hay que pulsar :wq? ¿Sabes cual es la historia del editor Vim?

Viajemos hacia atrás en el tiempo y encontrémonos en los orígenes de la informática con algunos de los pioneros de mentes lúcidas.

Este artículo es una nueva entrega del curso “improVIMsado” que desde hace meses vengo publicando en mi blog sobre el editor Vim y que puedes seguir en estos enlaces:

Este artículo es una traducción que he realizado del artículo en inglés “Where Vim came from” escrito por Sinclair Target y publicado bajo una licencia CC-by-sa. Comenzamos…

Recientemente me encontré con un formato de archivo conocido como Intel HEX. Por lo que puedo deducir, los archivos Intel HEX (que usan la extensión .hex) están destinados a hacer que las imágenes binarias sean menos opacas al codificarlas como líneas de dígitos hexadecimales.

Aparentemente, son utilizados por personas que programan microcontroladores o necesitan grabar datos en ROM. En cualquier caso, cuando abrí un archivo HEX en Vim por primera vez, descubrí algo impactante. Aquí estaba este formato de archivo que, al menos para mí, era profundamente esotérico, pero Vim ya lo sabía todo.

Cada línea de un archivo HEX es un registro dividido en diferentes campos; Vim se había adelantado y coloreó cada uno de los campos con un color diferente. Ejecuté y pregunté con asombro :set ft? Y Vim me contestó triunfante: filetype = hex

Vim está en todas partes. Es utilizado por tanta gente que algo como la compatibilidad con archivos HEX no debería ser una sorpresa. Vim viene preinstalado en MacOS y tiene una gran participación en el mundo de Linux.

Es familiar incluso para las personas que lo odian, porque bastantes herramientas de línea de comandos populares arrojarán a los usuarios a Vim de forma predeterminada y los no iniciados que se quedan atrapados en Vim se ha convertido ya en un meme.

Hay sitios web importantes, incluido Facebook, que se desplazarán hacia abajo cuando presione la tecla j y hacia arriba cuando presione la tecla k, el testigo inesperado de la propagación de Vim a través de la cultura digital.

Y, sin embargo, Vim también es un misterio. A diferencia de React, por ejemplo, que todo el mundo sabe que es desarrollado y mantenido por Facebook, Vim no tiene un patrocinador obvio. A pesar de su ubicuidad e importancia, no parece haber ningún tipo de comité u organización que tome decisiones sobre Vim.

Podría pasar varios minutos hurgando en el sitio web de Vim sin tener una mejor idea de quién creó Vim o por qué. Si inicia Vim sin darle un argumento de archivo, verá el mensaje de inicio de Vim, que dice que Vim fue desarrollado por “Bram Moolenaar et al.” Pero eso no dice mucho.

¿Quién es Bram Moolenaar y quiénes son sus sombríos cómplices?

Quizás lo más importante, mientras hacemos preguntas, ¿por qué salir de Vim implica escribir :wq ? Claro, es una operación de “escritura” (write en inglés) seguida de una operación de “salida” (quit en inglés), pero esa no es una convención particularmente intuitiva.

¿Quién decidió que copiar texto debería llamarse “yank”? ¿Por qué: %s/foo/bar/gc es la abreviatura de “buscar y reemplazar”? Las idiosincrasias de Vim parecen demasiado arbitrarias para haber sido inventadas, pero ¿de dónde vienen?

La respuesta, como suele ser el caso, comienza con ese antiguo crisol de la informática, que es Bell Labs. En cierto sentido, Vim es solo la última versión de un software, llámelo el “editor de texto wq”, que se ha desarrollado y mejorado continuamente desde los albores de la época Unix.

Ken Thompson escribe un editor de líneas

En 1966, Bell Labs contrató a Ken Thompson. Thompson acababa de completar una maestría en Ingeniería Eléctrica y Ciencias de la Computación en la Universidad de California, Berkeley.

Mientras estaba allí, había utilizado un editor de texto llamado QED, escrito para el sistema de tiempo compartido de Berkeley entre 1965 y 1966.1 Una de las primeras cosas que hizo Thompson después de llegar a Bell Labs fue reescribir QED para el sistema de tiempo compartido compatible con MIT.

Más tarde escribiría otra versión de QED para el proyecto Multics. En el camino, expandió el programa para que los usuarios pudieran buscar líneas en un archivo y hacer sustituciones usando expresiones regulares.

El proyecto Multics, que al igual que el Berkeley Timesharing System buscaba crear un sistema operativo de tiempo compartido comercialmente viable, fue una asociación entre el MIT, General Electric y Bell Labs. AT&T finalmente decidió que el proyecto no iba a ninguna parte y se retiró.

Thompson y el investigador de Bell Labs Dennis Ritchie, ahora sin acceso a un sistema de tiempo compartido y sin la “sensación de computación interactiva” que ofrecían tales sistemas, se propusieron crear su propia versión, que eventualmente se conocería como Unix.

En agosto En 1969, mientras su esposa y su hijo pequeño estaban de vacaciones en California, Thompson reunió los componentes básicos del nuevo sistema, asignando “una semana a cada uno, al sistema operativo, el shell, el editor y el ensamblador”.

El editor se llamaría ed. Se basó en QED pero no fue una reimplementación exacta. Thompson decidió deshacerse de ciertas funciones de QED. La compatibilidad con las expresiones regulares se redujo para que solo se entendieran las expresiones regulares relativamente simples.

QED permitía a los usuarios editar varios archivos a la vez abriendo varios búferes, pero ed solo funcionaría con un búfer a la vez. Y mientras que QED podría ejecutar un búfer que contenga comandos, ed no haría tal cosa.

Estas simplificaciones pueden haber sido necesarias. Dennis Ritchie ha dicho que prescindir de las expresiones regulares avanzadas de QED “no fue una gran pérdida”.

ed ahora es parte de la especificación POSIX, por lo que si tiene un sistema compatible con POSIX, lo tendrá instalado en su computadora.

Vale la pena jugar con él, porque muchos de los comandos ed son hoy parte de Vim. Para escribir un búfer en el disco, por ejemplo, debe usar el comando w. Para salir del editor, debe usar el comando q. Estos dos comandos se pueden especificar en la misma línea a la vez, por lo tanto, wq.

Como Vim, ed es un editor modal; para ingresar al modo de entrada desde el modo de comando, debe usar el comando de inserción (i), el comando de agregar (a) o el comando de cambio (c), dependiendo de cómo esté tratando de transformar su texto. ed también introdujo la sintaxis s/foo/bar/g para buscar y reemplazar o “sustituir” texto.

Dadas todas estas similitudes, es de esperar que el usuario promedio de Vim no tenga problemas para usar ed. Pero ed no se parece en nada a Vim en otro aspecto importante. ed es un verdadero editor de líneas. Fue escrito y ampliamente utilizado en los días de la impresora de teletipos.

Cuando Ken Thompson y Dennis Ritchie estaban hackeando creando Unix, se veían así:

ed no te permite editar líneas ubicadas entre las otras líneas del búfer abierto, o mover un cursor, porque ed tendría que volver a imprimir todo el archivo cada vez que le hiciera un cambio.

En 1969 no existía ningún mecanismo para que ed “borrara” el contenido de la pantalla, porque la pantalla era solo una hoja de papel y todo lo que ya había salido se había impreso en tinta.

Cuando sea necesario, puede pedirle a ed que imprima un rango de líneas usando el comando list (l), pero la mayoría de las veces está operando con texto que no puede ver.

Por lo tanto, usar ed es un poco intentar orientarse en una casa oscura con una linterna de poca potencia. Solo puede ver una cantidad limitada a la vez, por lo que debe hacer todo lo posible para recordar dónde está todo.

A continuación, se muestra un ejemplo de una sesión de educación. Agregué comentarios (después del carácter #) que explican el propósito de cada línea, aunque si realmente se ingresaran esos caracteres, ed no los reconocería como comentarios y se quejaría:

[sinclairtarget 09:49 ~]$ ed
i                           # Enter input mode
Hello world!
Isn't it a nice day?
.                           # Finish input
1,2l                        # List lines 1 to 2
Hello world!$
$
2d                          # Delete line 2
,l                          # List entire buffer
Hello world!$
Isn't it a nice day?$
s/nice/terrible/g           # Substitute globally
,l
Hello world!$
Isn't it a terrible day?$
w foo.txt                   # Write to foo.txt
38                          # (bytes written)
q                           # Quit
[sinclairtarget 10:50 ~]$ cat foo.txt
Hello world!
Isn't it a terrible day?

Como podéis ver, ed no es un programa especialmente hablador.

Ed funcionó bastante bien para Thompson y Ritchie. A otros les resultó difícil de usar y adquirió la reputación de ser un ejemplo particularmente atroz de la hostilidad de Unix hacia el novato.

En 1975, un hombre llamado George Coulouris desarrolló una versión mejorada de ed en el sistema Unix instalado en el Queen Mary’s College de Londres. Coulouris escribió a su editor para aprovechar las pantallas de video que tenía disponibles en Queen Mary’s.

A diferencia de ed, el programa de Coulouris permitía a los usuarios editar una sola línea mostrada en la pantalla, navegando a través de la línea pulsación de tecla por pulsación de tecla (imagínese usando Vim en una línea a la vez).

Coulouris llamó a su programa em, o “editor para mortales“, que supuestamente se había inspirado a hacer después de que Thompson hizo una visita a Queen Mary’s, vio el programa que Coulouris había construido y lo descartó, diciendo que no tenía necesidad de ver el estado de un archivo mientras lo edita.

En 1976, Coulouris los llevó consigo a UC Berkeley, donde pasó el verano como visitante del departamento de informática. Esto fue exactamente diez años después de que Ken Thompson dejara Berkeley para trabajar en Bell Labs.

En Berkeley, Coulouris conoció a Bill Joy, un estudiante graduado que trabajaba en Berkeley Software Distribution (BSD). Coulouris se los mostró a Joy, quien, comenzando con el código fuente de Coulouris, creó una versión mejorada de ed llamada ex, que significa “edición extendida”.

La versión 1.1 de ex se incluyó con el primer lanzamiento de BSD Unix en 1978. ex era en gran parte compatible con ed, pero agregó dos modos más: un modo “abierto”, que permitía la edición de una sola línea como había sido posible con em, y un modo “visual”, que se apoderó de toda la pantalla y permitió la edición en vivo de un archivo completo como estamos acostumbrados hoy.

Para la segunda versión de BSD en 1979, se introdujo un ejecutable llamado vi que hacía poco más que abrir ex en modo visual.

ex/vi (de ahora en adelante vi) estableció la mayoría de las convenciones que ahora asociamos con Vim que aún no formaban parte de ed.

El terminal de video que estaba usando Joy era un Lear Siegler ADM-3A, que tenía un teclado sin teclas de cursor. En cambio, se pintaron flechas en las teclas h, j, k y l, razón por la cual Joy usó esas teclas para el movimiento del cursor en vi.

La tecla de escape en el teclado ADM-3A también estaba donde hoy encontraríamos la tecla de tabulación, lo que explica cómo a una tecla tan difícil de alcanzar se le asignó una operación tan común como salir de un modo.

El caracter : que precede a los comandos también proviene de vi, que en el modo normal (es decir, el modo ingresado al ejecutar ex) usaba : como indicador.

Esto abordó una queja que había desde hace tiempo sobre ed, que, una vez lanzada, saluda a los usuarios con absoluto silencio. En modo visual, guardar y salir ahora implicaba escribir el clásico :wq.

Las acciones de “yank” (copiar) y “put“ (pegar o poner), las marcas y el comando set para configurar las opciones eran parte del vi original. Las funciones que usamos en el curso de la edición básica de texto hoy en Vim son en gran parte funciones de vi.

vi fue el único editor de texto incluido con BSD Unix además de ed. En ese momento, Emacs podía costar cientos de dólares (esto fue antes de GNU Emacs), por lo que vi se volvió enormemente popular.

Pero vi era un descendiente directo de ed, lo que significaba que el código fuente no podía modificarse sin una licencia fuente de AT&T. Esto motivó a varias personas a crear versiones de código abierto de vi.

STEVIE (Editor ST para entusiastas de VI) apareció en 1987, Elvis apareció en 1990 y nvi apareció en 1994. Algunos de estos clones agregaron características adicionales como resaltado de sintaxis y ventanas divididas. Elvis, en particular, vio muchas de sus características incorporadas en Vim, ya que muchos usuarios de Elvis presionaron por su inclusión.

Bram Moolennar escribe Vim

“Vim”, que ahora es la abreviación de “Vi mejorado”, originalmente significaba “Vi imitación”. Como muchos de los otros clones de vi, Vim comenzó como un intento de replicar vi en una plataforma donde no estaba disponible.

Bram Moolenaar, un ingeniero de software holandés que trabaja para una empresa de fotocopiadoras en Venlo, Países Bajos, quería algo como vi para su nuevo equipo Amiga 2000. Moolenaar se había acostumbrado a usar vi en los sistemas Unix en su universidad y ahora estaba “en sus dedos.”

Así que en 1988, utilizando el clon existente de STEVIE vi como punto de partida, Moolenaar comenzó a trabajar en Vim.

Moolenaar tenía acceso a STEVIE porque STEVIE había aparecido previamente en algo llamado “Fred Fish disk”. Fred Fish era un programador estadounidense que enviaba por correo un disquete todos los meses con una cuidada selección del mejor software de código abierto disponible para la plataforma Amiga.

Cualquiera podía solicitar un disco por nada más que el precio del envío. Se lanzaron varias versiones de STEVIE en “Fred Fish disk”. La versión que usó Moolenaar había sido lanzada en el disco 256.11 de Fred Fish (lamentablemente, los discos de Fred Fish parecen no tener nada que ver con Freddi Fish).

A Moolenaar le gustaba STEVIE, pero rápidamente se dio cuenta de que faltaban muchos comandos vi. Así que, para la primera versión de Vim, Moolenaar hizo de la compatibilidad con vi su prioridad.

Alguien más había escrito una serie de macros vi que, cuando se ejecutaban a través de un editor compatible con vi, podían resolver un laberinto generado aleatoriamente. Moolenaar pudo hacer que estas macros funcionaran en Vim.

En 1991, Vim fue lanzado por primera vez en el disco 591 de Fred Fish como “Vi Imitation”. Moolenaar había agregado algunas características (incluyendo deshacer multinivel y un modo de “corrección rápida” para errores del compilador) que significaban que Vim había superado vi . Pero Vim seguiría siendo “Vi Imitation” hasta Vim 2.0, lanzado en 1993 a través de FTP.

Moolenaar, con la ayuda ocasional de varios colaboradores de Internet, agregó funciones a Vim a un ritmo constante.

Vim 2.0 introdujo soporte para la opción de ajuste y para el desplazamiento horizontal a través de largas líneas de texto. Vim 3.0 agregó soporte para ventanas divididas y búferes, una característica inspirada en el clon de vi nvi.

Vim ahora también guarda cada búfer en un archivo de intercambio, para que el texto editado pudiera resistir a un bloqueo del equipo o editor.

Vimscript hizo su primera aparición en Vim 5.0, junto con soporte para resaltado de sintaxis. Mientras tanto, la popularidad de Vim fue creciendo. Fue portado a MS-DOS, a Windows, a Mac e incluso a Unix, donde compitió con el vi original.

En 2006, Vim fue votado como el editor más popular entre los lectores de Linux Journal. En la actualidad, según la Encuesta para desarrolladores de Stack Overflow 2018, Vim es el editor en modo texto (es decir, emulador de terminal) más popular, utilizado por el 25,8% de todos los desarrolladores de software ( y el 40% de la gente de Sysadmin / DevOps).

Durante un tiempo, a fines de la década de 1980 y durante la de 1990, los programadores libraron las “Guerras de los editores”, que enfrentaron a los usuarios de Emacs contra los usuarios de vi (y eventualmente Vim). Si bien Emacs ciertamente todavía tiene seguidores, algunas personas piensan que las guerras de los editores terminaron y que Vim ganó.

La Encuesta de desarrolladores de Stack Overflow de 2018 sugiere que esto es cierto; sólo el 4,1% de los encuestados utilizó Emacs.

¿Cómo llegó Vim a tener tanto éxito? Obviamente, a la gente le gustan las características que Vim ofrece. Pero yo diría que la larga historia detrás de Vim ilustra que tiene más ventajas que unicamente su conjunto de características.

El código base de Vim se remonta solo a 1988, cuando Moolenaar comenzó a trabajar en él. El “editor de texto wq”, por otro lado, la visión más amplia de cómo debería funcionar un editor de texto Unix, se remonta a medio siglo.

El “editor de texto wq” tenía algunas expresiones concretas diferentes, pero gracias en parte a la inusual atención prestada a la compatibilidad con versiones anteriores tanto por Bill Joy como por Bram Moolenaar, las buenas ideas se acumularon gradualmente con el tiempo.

El “editor de texto wq”, en ese sentido, es uno de los proyectos de código abierto más antiguos y exitosos, habiendo disfrutado de las contribuciones de algunas de las mentes más brillantes del mundo de la informática.

No creo que el enfoque de desarrollo de “compañía-reciente-que-desecha-todos-precedentes-y-crea-nuevo-software-disruptivo” sea necesariamente malo, pero Vim es un recordatorio de que el enfoque colaborativo e incremental también puede producir maravillas.


Y hasta aquí el artículo y mi traducción. Espero que te resulte interesante la lectura de este pedazo de historia en cuentión tecnológica. Y cómo el software libre es una pieza importante a la hora de mejorar el software junto con el aporte de muchas personas.

Te invito a leer el artículo original y descubrir sus enlaces, y te suscribas a sus feeds.

10 comentarios sobre “¿De dónde viene #Vim? La historia de este gran editor

  1. Increíble lo que el amor al soft hace, cada día pienso que hay menos personas que saben hacer este tipo de cosas y se limitan a consumir herramientas ya hechas sin saber realmente de software, pasa mucho con los desarrolladores de hoy en día que de ingenieros y científicos computacionales pasaron a “Pica código” y ya, falta más gente así.

  2. ¡Muy interesante, muchas gracias por la traducción!

    Creo que es muy educativo conocer el origen de algunos de los proyectos más importantes dentro del software libre, entender las motivaciones de quienes los iniciaron y cómo fueron creciendo y madurando gracias a las aportaciones de otros colaboradores. Es la única forma (creo) de llegar a comprender y a valorar el poder del SL.

    1. Me alegro que así te lo haya parecido!
      Lo traduje por que así “me obligaba” a leerlo y así compartirlo… me pareció muy interesante!
      Gracias por la visita y por comentar… 😉

  3. Pero que interesante me resulto leer tú articulo, compa. Cuando leí el articulo original, hace un tiempo atrás, me genero nostalgia de mejores tiempos, y ya traducido hace que uno se pueda enamorar de la tecnologia que tanto nos gusta ❤ geek obviamente.

    Gracias por compartirlo, un abrazo y buenas vibras.

  4. Estoy convencido por haberlo vivido, de que hay una informática hasta los 90 y otra posterior, más “bonita” pero menos excitante.
    Muy buen buceo por la historia.
    Personalmente opino que Gnu Emacs (el que yo uso para escribir ficción) está un escalón por encima de Vim.
    Ala, ahí queda eso para que me lapiden jeje

    1. Hola.
      Quizás tienes razón con eso de la informática. La primera fue de personas pioneras que sentaron unas bases…
      Vim vs. GNU Emacs? Vaya nunca lo había oído!
      Saludos y gracias por comentar.

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .