Vi
vi (pronunciado con letras distintas) es un editor de texto orientado a la pantalla creado originalmente para el sistema operativo Unix. El subconjunto portátil del comportamiento de vi y los programas basados en él, y el lenguaje del editor ex compatible con estos programas, está descrito (y por lo tanto estandarizado por) la especificación única de Unix y POSIX.
El código original de vi fue escrito por Bill Joy en 1976, como modo visual para un editor de línea llamado ex que Joy había escrito con Chuck Haley. Bill Joy's ex 1.1 se lanzó como parte de la primera versión de Unix de Berkeley Software Distribution (BSD) en marzo de 1978. No fue hasta la versión 2.0 de ex, lanzada como parte de Second BSD en mayo de 1979 que se instaló el editor. bajo el nombre "vi" (que llevó a los usuarios directamente al modo visual de ex), y el nombre por el que se conoce hoy. Algunas implementaciones actuales de vi pueden rastrear la ascendencia de su código fuente hasta Bill Joy; otros son reimplementaciones completamente nuevas y en gran parte compatibles.
El nombre "vi" se deriva de la abreviatura más corta e inequívoca del comando ex visual, que cambia el editor de línea ex a su modo de pantalla completa. El nombre se pronuncia (las letras inglesas v y i).
Además de varias variantes de software no libre de vi distribuidas con implementaciones propietarias de Unix, vi fue de código abierto con OpenSolaris, y existen varios clones de vi de software libre y de código abierto. Una encuesta de 2009 de los lectores de Linux Journal encontró que vi era el editor de texto más utilizado entre los encuestados, superando a gedit, el segundo editor más utilizado, por casi un factor de dos (36% a 19%)..
Historia
Creación
vi se derivó de una secuencia de editores de línea de comandos de UNIX, comenzando con ed, que era un editor de línea diseñado para funcionar bien en teleimpresoras, en lugar de terminales de visualización. Dentro de AT&T Corporation, donde se originó ed, la gente parecía estar contenta con un editor tan básico y hostil como ed, recuerda George Coulouris:
[...] durante muchos años, no tenían terminales adecuados. Llevaron con TTYs y otros terminales de impresión durante mucho tiempo, y cuando compraron pantallas para todos, recibieron Tektronix 4014s. Estas fueron grandes pantallas de tubo de almacenamiento. No se puede ejecutar un editor de pantalla en una pantalla de almacenamiento-tubo ya que la imagen no se puede actualizar. Así que tuvo que caer a alguien más para la edición pionera de pantalla para Unix, y que eramos nosotros inicialmente, y continuamos haciéndolo durante muchos años.
Coulouris consideró que los comandos crípticos de ed solo eran adecuados para "inmortales" y, por lo tanto, en febrero de 1976, mejoró ed (usando la fuente ed de Ken Thompson como punto de partida) para hacer em (el "editor para mortales") mientras actuaba como profesor en Queen Mary College. El editor em fue diseñado para terminales de visualización y era un editor visual de una sola línea a la vez. Fue uno de los primeros programas en Unix en hacer un uso intensivo del "modo de entrada de terminal sin procesar", en el que el programa en ejecución, en lugar del controlador del dispositivo de terminal, manejaba todas las pulsaciones de teclas. Cuando Coulouris visitó UC Berkeley en el verano de 1976, trajo una cinta DEC que los contenía y mostró el editor a varias personas. Algunas personas consideraron que este nuevo tipo de editor era un potencial acaparador de recursos, pero otros, incluido Bill Joy, quedaron impresionados.
Inspirándose en em y en sus propios ajustes a ed, Bill Joy y Chuck Haley, ambos estudiantes de posgrado en UC Berkeley, tomaron el código de em para crearlo y luego "ampliaron" es para crear la versión ex 0.1. Después de la partida de Haley, Bruce Englar animó a Joy a rediseñar el editor, lo que hizo de junio a octubre de 1977, agregando un modo visual de pantalla completa a ex, que pasó a ser vi.
vi y ex comparten su código; vi es el lanzamiento binario ex con la capacidad de mostrar el texto que se está editando en una terminal de computadora: es el modo visual ex. El nombre vi proviene del comando ex abreviado (vi
) para ingresar al modo visual desde dentro. El comando de formato largo para hacer lo mismo era visual
, y el nombre vi se explica como una contracción de visual en literatura posterior. vi
es también el comando de shell para iniciar ex/vi en el modo visual directamente, desde dentro de un shell.
Según Joy, muchas de las ideas de este modo visual se tomaron de Bravo, el editor de texto bimodal desarrollado en Xerox PARC para Alto. En una entrevista sobre los orígenes de vi, Joy dijo:
Muchas de las ideas para el modo de edición de la pantalla fueron robadas de un manual Bravo que observé y copé. Dot es realmente el doble paisaje de Bravo, el comando redo. La mayoría de las cosas fueron robadas. Había algunas cosas robadas de Ed: tenemos una página manual para la versión de Toronto de Ed, con la que creo que Rob Pike tenía algo que ver. Tomamos algunas de las extensiones de expresión regulares fuera de eso.
Joy usó una terminal Lear Siegler ADM-3A. En este terminal, la tecla Escape estaba en la ubicación que ahora ocupa la tecla Tab en el teclado de PC de IBM ampliamente utilizado (en el lado izquierdo de la parte alfabética del teclado, una fila por encima de la fila del medio). Esto lo convirtió en una opción conveniente para cambiar de modo vi. Además, las teclas h, j, k, l cumplían una doble función como teclas de movimiento del cursor y estaban inscritas con flechas, razón por la cual vi las usa de esa manera. El ADM-3A no tenía otras teclas de cursor. Joy explicó que los comandos concisos de un solo carácter y la capacidad de escribir antes de la pantalla fueron el resultado del lento módem de 300 baudios que usó al desarrollar el software y que quería ser productivo cuando la pantalla pintaba más lento de lo que podía pensar..
Distribución
Joy fue responsable de crear el primer lanzamiento de BSD Unix en marzo de 1978 e incluyó ex 1.1 (fechado el 1 de febrero de 1978) en la distribución, exponiendo así a su editor a una audiencia más allá de UC Berkeley. Desde ese lanzamiento de BSD Unix en adelante, los únicos editores que vinieron con el sistema Unix fueron ed y ex. En una entrevista de 1984, Joy atribuyó gran parte del éxito de vi al hecho de que se incluía de forma gratuita, mientras que otros editores, como Emacs, podían costar cientos de dólares.
Eventualmente, se observó que la mayoría de los exusuarios pasaban todo su tiempo en modo visual y, por lo tanto, en ex 2.0 (lanzado como parte de Second Berkeley Software Distribution en mayo de 1979), Joy creó vi como un enlace fijo a ex, de tal manera que cuando se invoca como vi, ex se iniciaría automáticamente en su modo visual. Así, vi no es la evolución de ex, vi is ex.
Joy describió ex 2.0 (vi) como un programa muy grande, apenas capaz de caber en la memoria de un PDP-11/70, por lo tanto, aunque hoy vi puede considerarse un programa pequeño y liviano, no se vio de esa manera temprano en su historia. En la versión 3.1, enviada con 3BSD en diciembre de 1979, la versión completa de vi ya no cabía en la memoria de un PDP-11; el editor también sería demasiado grande para ejecutarse en PC/IX para IBM PC en 1984.
Joy siguió siendo el desarrollador principal de vi hasta la versión 2.7 en junio de 1979, e hizo contribuciones ocasionales al desarrollo de vi hasta al menos la versión 3.5 en agosto de 1980. Al hablar sobre los orígenes de vi y por qué interrumpió el desarrollo, alegría dijo:
Desearía no haber usado todas las llaves del teclado. Creo que una de las cosas interesantes es que vi es realmente un editor basado en modos. Creo que como editores basados en modos, es bastante bueno. Una de las cosas buenas de EMACS, sin embargo, es su programabilidad y la moderación. Esas son dos ideas que nunca se me ocurrió. Tampoco era muy bueno para optimizar el código cuando escribí vi. Creo que el módulo redisplay del editor es casi intratable. Hace un trabajo muy bueno para lo que hace, pero cuando estás escribiendo programas como estás aprendiendo... Por eso dejé de trabajar en ello.
Lo que realmente sucedió fue que estaba en el proceso de añadir multiventanas a vi cuando instalamos nuestro VAX, que habría sido en diciembre de '78. No teníamos ningún respaldo y la unidad de cinta se rompió. Continué trabajando incluso sin poder hacer copias de seguridad. Y luego el código fuente se cortó y no tenía un listado completo. Casi había reescrito todo el código de visualización para las ventanas, y eso fue cuando me di por vencido. Después de eso, volví a la versión anterior y documenté el código, terminé el manual y lo cerré. Si ese escruzo no hubiera ocurrido, vi tendría múltiples ventanas, y podría haber puesto en alguna programabilidad, pero no lo sé.
El problema fundamental con vi es que no tiene un ratón y por lo tanto tienes todos estos comandos. En algún sentido, su retroceso por el tipo de cosa que obtendrías de una cosa orientada al ratón. Creo que múltiples niveles de deshacer también serían maravillosos. Pero fundamentalmente, vi sigue ed dentro. No puedes engañarlo.
Es como una de esas pinatas, cosas que tienen caramelos dentro pero tiene capa tras capa de papel maché encima. No tiene un concepto unificado. Creo que si iba a volver... No regresaría, pero empezaré de nuevo.
En 1979, Mary Ann Horton asumió la responsabilidad de vi. Horton agregó soporte para flechas y teclas de función, macros y mejoró el rendimiento al reemplazar termcap con terminfo.
Puertos y clones
Hasta la versión 3.7 de vi, creada en octubre de 1981, UC Berkeley fue el hogar de desarrollo de vi, pero con la partida de Bill Joy a principios de 1982 para unirse a Sun Microsystems y AT&T's UNIX System V (enero de 1983) al adoptar vi, los cambios en el código base de vi ocurrieron más lentamente y de una manera más dispersa e incompatible entre sí. En UC Berkeley, se realizaron cambios pero el número de versión nunca se actualizó más allá de 3.7. Los proveedores comerciales de Unix, como Sun, HP, DEC e IBM, recibieron cada uno copias de la fuente vi, y sus sistemas operativos, Solaris, HP-UX, Tru64 UNIX y AIX, hoy continúan manteniendo versiones de vi que descienden directamente de la Versión 3.7, pero con características adicionales, como asignaciones de teclas ajustables, encriptación y compatibilidad con caracteres amplios.
Si bien los proveedores comerciales podían trabajar con el código base de Bill Joy (y continuar usándolo hoy en día), muchas personas no podían hacerlo. Debido a que Joy había comenzado con el editor de Ken Thompson, ex y vi eran trabajos derivados y no podían distribuirse excepto a personas que tenían una licencia de fuente de AT&T. Las personas que busquen un editor de estilo Unix gratuito tendrían que buscar en otra parte. En 1985, una versión de Emacs (MicroEMACS) estaba disponible para una variedad de plataformas, pero no fue hasta junio de 1987 que apareció STEVIE (ST Editor for VI Enthusiasts), un clon vi limitado. A principios de enero de 1990, Steve Kirkendall publicó un nuevo clon de vi, Elvis, en el grupo de noticias de Usenet comp.os.minix, buscando un clon de vi más completo y más fiel que STEVIE. Rápidamente atrajo un interés considerable en varias comunidades de entusiastas. Andrew Tanenbaum rápidamente le pidió a la comunidad que decidiera que uno de estos dos editores sería el clon de vi en Minix; Elvis fue elegido y sigue siendo el clon vi de Minix en la actualidad.
En 1989, Lynne Jolitz y William Jolitz comenzaron a migrar BSD Unix para ejecutarse en procesadores de clase 386, pero para crear una distribución gratuita necesitaban evitar cualquier código contaminado por AT&T, incluido el vi de Joy. Para llenar el vacío dejado por la eliminación de vi, su distribución 386BSD de 1992 adoptó a Elvis como reemplazo de vi. Los descendientes de 386BSD, FreeBSD y NetBSD, siguieron su ejemplo. Pero en UC Berkeley, Keith Bostic quería un "error para compatibilidad con errores" reemplazo de Joy's vi para 4.4BSD-Lite. Usando Elvis de Kirkendall (versión 1.8) como punto de partida, Bostic creó nvi y lo lanzó en la primavera del norte de 1994. Cuando FreeBSD y NetBSD resincronizaron el código base 4.4-Lite2, también cambiaron a Bostic nvi, que continúan usando hoy.
A pesar de la existencia de clones vi con funciones mejoradas, en algún momento antes de junio de 2000, Gunnar Ritter transfirió el código base vi de Joy (tomado de 2.11BSD, febrero de 1992) a sistemas operativos modernos basados en Unix, como Linux y FreeBSD.. Inicialmente, su trabajo era técnicamente ilegal para distribuir sin una licencia de fuente de AT&T, pero, en enero de 2002, esas reglas de licencia se relajaron, permitiendo la distribución legal como un proyecto de código abierto. Ritter continuó realizando pequeñas mejoras en el código base de vi, similares a las realizadas por los proveedores comerciales de Unix que aún usan el código base de Joy, incluidos los cambios requeridos por el estándar POSIX.2 para vi. Su trabajo está disponible como Traditional Vi y se ejecuta hoy en una variedad de sistemas.
Pero aunque Joy's vi estaba disponible una vez más para BSD Unix, llegó después de que varias versiones de BSD se comprometieran con nvi, que proporciona una serie de mejoras sobre el vi tradicional y elimina algunas de sus características heredadas. (como el modo abierto para editar una línea a la vez). En cierto sentido, es una extraña inversión que BSD Unix, donde comenzó el código base vi de Joy, ya no lo use, y los Unixes derivados de AT&T, que en los primeros días carecían del editor de Joy, son los que ahora usan y mantienen versiones modificadas de su código.
Impacto
A lo largo de los años transcurridos desde su creación, vi se convirtió en el editor estándar de Unix de facto y en el favorito de los piratas informáticos fuera del MIT hasta el surgimiento de Emacs después de aproximadamente 1984. La especificación única de UNIX especifica vi, por lo que cada el sistema conforme debe tenerlo.
vi todavía es ampliamente utilizado por los usuarios de la familia de sistemas operativos Unix. Aproximadamente la mitad de los encuestados en una encuesta de USENET de 1991 prefirieron vi. En 1999, Tim O'Reilly, fundador de la editorial homónima de libros informáticos, afirmó que su empresa vendió más copias de su libro vi que de su libro emacs.
Interfaz
vi es un editor modal: funciona en modo de inserción (donde el texto escrito se convierte en parte del documento) o en modo de comando (donde las pulsaciones de teclas se interpretan como comandos que controlar la sesión de edición). Por ejemplo, al escribir i en el modo de comando, el editor cambia al modo de inserción, pero al escribir i nuevamente en este punto coloca una "i" carácter en el documento. Desde el modo de inserción, al presionar ESC, el editor vuelve al modo de comando. Una ventaja percibida de la separación de vi de los modos de entrada de texto y comando es que tanto la edición de texto como las operaciones de comando se pueden realizar sin necesidad de quitar las manos del usuario de la fila de inicio. Como los editores no modales suelen tener que reservar todas las teclas con letras y símbolos para la impresión de caracteres, cualquier comando especial para acciones que no sean agregar texto al búfer debe asignarse a teclas que no producen caracteres, como teclas de función, o combinaciones de teclas modificadoras como Ctrl y Alt con teclas regulares. Vi tiene la propiedad de que la mayoría de las teclas ordinarias están conectadas a algún tipo de comando para posicionar, modificar texto, buscar, etc., ya sea individualmente o en combinaciones de teclas. Muchos comandos se pueden escribir al tacto sin el uso de Ctrl o Alt. Otros tipos de editores generalmente requieren que el usuario mueva sus manos desde la fila de inicio cuando escribe al tacto:
- Utilizar un ratón para seleccionar texto, comandos o elementos de menú en un editor de GUI.
- A las teclas de flecha o funciones de edición (Home / End o Function Keys).
- Para invocar comandos usando teclas de modificador junto con las teclas de máquina de escribir estándar.
Por ejemplo, en vi, reemplazar una palabra es cwtexto de reemplazo Escape, que es una combinación de dos comandos independientes (cambio y movimiento de palabra) junto con una transición hacia y desde el modo de inserción. El texto entre la posición del cursor y el final de la palabra se sobrescribe con el texto de reemplazo. La operación se puede repetir en alguna otra ubicación escribiendo ., el efecto es que la palabra que comienza en esa ubicación se reemplazará con el mismo texto de reemplazo.
Un libro de texto de interacción humano-computadora señala en su primera página que "Una de las debilidades clásicas de la interfaz de usuario, contada una y otra vez por educadores de HCI de todo el mundo, es la falta de comentarios del editor vi cuando cambiando entre modos. Muchos usuarios cometieron el error de proporcionar una entrada mientras estaban en el modo de comando o ingresar un comando mientras estaban en el modo de entrada."
Clones y derivados contemporáneos
- Vim "Vi IMproved" tiene muchas características adicionales en comparación con vi, incluyendo (scriptible) resaltado de sintaxis, soporte para ratón, versiones gráficas, modo visual, muchos nuevos comandos de edición y una gran cantidad de extensión en el área de ex comandos. Vim está incluido con casi todas las distribuciones de Linux (y también se envía con cada copia de Apple macOS). Vim también tiene un modo de compatibilidad vi, en el que Vim es más compatible con vi de lo que sería de otro modo, aunque algunas características vi, como modo abierto, faltan en Vim, incluso en modo de compatibilidad. Este modo es controlado por el
:set compatible
Opción. Es automáticamente encendido por Vim cuando se inicia en una situación que parece como si el software se espera que sea vi compatible. Las características vibratorias que no entran en conflicto con la compatibilidad vi están siempre disponibles, independientemente de la configuración. Vim fue derivado de un puerto de STEVIE a la Amiga. - Elvis es un clon gratuito para Unix y otros sistemas operativos escritos por Steve Kirkendall. Elvis introdujo una serie de características presentes en otros clones vi, incluyendo permitiendo que las teclas del cursor funcionen en modo de entrada. Fue el primero en proporcionar resaltado sintaxis de color (y para generalizar la sintaxis resaltando a múltiples tipos de archivo). Elvis 1.x fue utilizado como punto de partida para nvi, pero Elvis 2.0 agregó numerosas características, incluyendo múltiples buffers, ventanas, modos de visualización y esquemas de acceso a archivos. Elvis es la versión estándar de vi enviada en Slackware Linux, Kate OS y MINIX. La versión más reciente de Elvis es 2.2, publicada en octubre de 2003.
- nvi es una implementación del editor de texto ex/vi originalmente distribuido como parte de la última distribución oficial de software de Berkeley (4.4 BSD-Lite). Esta es la versión de vi que se envía con todas las distribuciones de código abierto basadas en BSD. Añade historia de comandos y edición, finalizaciones de nombres de archivo, múltiples buffers de edición y multi-windowing (incluyendo varias ventanas en el mismo buffer de edición). Más allá de 1.79, de octubre de 1996, que es la versión estable recomendada, ha habido "liberaciones de desarrollo" de nvi, el más reciente de los cuales es 1.81.6, de noviembre de 2007.
- vile fue inicialmente derivado de una versión temprana de Microemacs en un intento de traer el paradigma de edición multi-ventana/multi-buffer Emacs a los usuarios vi, y fue publicado por primera vez en Usenet alt.sources en 1991. Proporciona un deshacer infinito, compatibilidad UTF-8, operación multi-ventana/multi-buffer, un lenguaje de expansión macro, resaltación de sintaxis, lectura de archivos y ganchos de escritura, y más.
- BusyBox, un conjunto de utilidades Linux estándar en un solo ejecutable, incluye un pequeño clon vi.
- Neovim, un refactor de Vim, que se esfuerza por superar.
Contenido relacionado
♯P
Problema de la altura de la estrella
Código