vi (pronunciado como letras distintas, / ˌ v iː ˈ aɪ / )[1]editor de textoorientado a pantallacreado originalmente para elUnix. El subconjunto portátil del comportamiento de vi y los programas basados en él, y elexcompatible con estos programas, se describe (y por lo tanto está estandarizado) por laEspecificación Única de UnixyPOSIX.[2]
El código original de vi fue escrito por Bill Joy en 1976 como el modo visual para el editor de línea ex que Joy había escrito con Chuck Haley. [3] El ex 1.1 de Joy fue lanzado 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 el editor fue instalado bajo el nombre "vi" (que llevaba a los usuarios directamente al modo visual de ex), [4] y el nombre por el que se lo conoce hoy. Algunas implementaciones actuales de vi pueden rastrear su ascendencia del código fuente a Bill Joy; otras son reimplementaciones completamente nuevas, en gran parte compatibles. [ cita requerida ] [ discutir ]
El nombre "vi" se deriva de la abreviatura más corta e inequívoca del comando ex , que cambia el editor de líneavisual ex a su modo de pantalla completa. El nombre se pronuncia / ˌ v iː ˈ aɪ / (las letras inglesas v e i ). [5] [6]
Además de varias variantes de vi que no son software libre y que se distribuyen con implementaciones propietarias de Unix, vi se convirtió en código abierto con OpenSolaris y existen varios clones de vi en software libre y de código abierto . Una encuesta de 2009 a los lectores de Linux Journal descubrió 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%). [7]
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 pantalla . Dentro de AT&T Corporation , donde se originó ed, la gente parecía estar contenta con un editor tan básico y poco amigable como ed, recuerda George Coulouris : [8]
[...] durante muchos años no tuvieron terminales adecuados. Continuaron con los TTY y otros terminales de impresión durante mucho tiempo, y cuando compraron pantallas para todos, adquirieron Tektronix 4014. Se trataba de pantallas de gran tamaño con tubos de almacenamiento . No se puede ejecutar un editor de pantalla en una pantalla con tubos de almacenamiento, ya que la imagen no se puede actualizar. Por lo tanto, tuvo que recaer en otra persona la tarea de ser pioneros en la edición de pantallas para Unix, y esa tarea la tuvimos nosotros inicialmente, y continuamos haciéndolo durante muchos años.
Coulouris consideraba que los comandos crípticos de ed sólo eran adecuados para los "inmortales", y por ello en febrero de 1976 mejoró ed (usando el código fuente de ed de Ken Thompson como punto de partida) para crear em (el "editor para mortales" [9] ) mientras trabajaba como profesor en el Queen Mary College . [8] 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 DECtape que contenía em y mostró el editor a varias personas. Algunas personas consideraron que este nuevo tipo de editor podría consumir recursos, pero otras, incluido Bill Joy , quedaron impresionadas. [8]
Inspirados por em y por sus propios ajustes a ed, [3] Bill Joy y Chuck Haley, ambos estudiantes de posgrado en UC Berkeley , tomaron el código de em para hacer en, [3] [10] y luego "extendieron" en para crear ex versión 0.1. [3] Después de la partida de Haley, Bruce Englar alentó a Joy a rediseñar el editor, [11] lo que hizo entre junio y octubre de 1977 agregando un modo visual de pantalla completa a ex [12] —que llegó a ser vi. [13]
vi y ex comparten su código; vi es el binario ex que se inicia con la capacidad de reproducir el texto que se está editando en una terminal de computadora —es el modo visual de ex. [13] El nombre vi proviene del comando ex abreviado ( vi
) para ingresar al modo visual desde dentro de él. El comando de formato largo para hacer lo mismo era visual
, [13] [14] y el nombre vi se explica como una contracción de visual en la literatura posterior. vi
es también el comando de shell para iniciar ex/vi en el modo visual directamente, desde dentro de un shell . [13]
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: [3]
Muchas de las ideas para el modo de edición de pantalla fueron robadas de un manual de Bravo que miré y copié subrepticiamente. Dot es en realidad el doble escape de Bravo, el comando rehacer. La mayoría de las cosas fueron robadas. Hubo algunas cosas robadas de ed (obtuvimos una página del manual para la versión de Toronto de ed, en la que creo que Rob Pike tuvo algo que ver). Eliminamos algunas de las extensiones de expresiones regulares de esa página.
Joy utilizó un terminal Lear Siegler ADM-3A . En este terminal, la tecla Escape estaba en la ubicación que ahora ocupa la tecla Tab en el ampliamente utilizado teclado IBM PC (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 los modos de vi. Además, las teclas h , j , k y l cumplían una doble función como teclas de movimiento del cursor y estaban inscritas con flechas, por lo que 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 que se mostrara la pantalla eran el resultado del módem lento de 300 baudios que utilizó al desarrollar el software y que quería ser productivo cuando la pantalla se estaba pintando más lento de lo que podía pensar. [10]
Joy fue responsable de crear la primera versión de BSD Unix en marzo de 1978, e incluyó ex 1.1 (fechada el 1 de febrero de 1978) [15] en la distribución, exponiendo así su editor a una audiencia más allá de UC Berkeley . [16] A partir de esa versión 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. [3]
Finalmente, se observó que la mayoría de los usuarios de ex pasaban todo el tiempo en modo visual [ cita requerida ] y, por lo tanto, en ex 2.0 (publicado como parte de Second Berkeley Software Distribution en mayo de 1979), Joy creó vi como un enlace duro a ex [17], de modo que cuando se invocaba como vi, ex se iniciaba automáticamente en su modo visual. Por lo tanto, vi no es la evolución de ex, vi es ex.
Joy describió a ex 2.0 (vi) como un programa muy grande, que apenas cabía en la memoria de un PDP-11/70 , [18] por lo que, aunque vi puede considerarse hoy un programa pequeño y ligero, no se lo veía así en sus inicios. En la versión 3.1, que se entregó con 3BSD en diciembre de 1979, la versión completa de vi ya no cabía en la memoria de un PDP-11; [19] el editor también sería demasiado grande para ejecutarse en PC/IX para el IBM PC en 1984. [20]
Joy continuó siendo el desarrollador principal de vi hasta la versión 2.7 en junio de 1979, [11] [21] e hizo contribuciones ocasionales al desarrollo de vi hasta al menos la versión 3.5 en agosto de 1980. [21] Al discutir los orígenes de vi y por qué interrumpió el desarrollo, Joy dijo: [3]
Ojalá no hubiéramos usado todas las teclas del teclado. Creo que una de las cosas interesantes es que vi es realmente un editor basado en modos . Creo que, como editor basado en modos, es bastante bueno. Sin embargo, una de las cosas buenas de EMACS es su programabilidad y su falta de modo. Esas son dos ideas que nunca se me ocurrieron. Tampoco era muy bueno optimizando código cuando escribí vi. Creo que el módulo de rediseño del editor es casi intratable. Hace un muy buen trabajo para lo que hace, pero cuando estás escribiendo programas mientras estás aprendiendo... Por eso dejé de trabajar en él.
Lo que realmente pasó fue que yo estaba en el proceso de agregar ventanas múltiples a vi cuando instalamos nuestro VAX , lo que habría sido en diciembre de 1978. No teníamos ninguna copia de seguridad y la unidad de cinta se rompió. Seguí trabajando incluso sin poder hacer copias de seguridad. Y luego el código fuente se complicó y no tenía una lista completa. Casi había reescrito todo el código de visualización para ventanas, y fue entonces cuando me di por vencido. Después de eso, volví a la versión anterior y simplemente documenté el código, terminé el manual y lo cerré. Si ese complicidad no hubiera sucedido, vi tendría múltiples ventanas y podría haber agregado algo de programabilidad, pero no lo sé.
El problema fundamental de vi es que no tiene un ratón y, por lo tanto, tienes todos estos comandos. En cierto sentido, es lo contrario de lo que obtendrías de un programa orientado al ratón. Creo que múltiples niveles de deshacer también serían maravillosos. Pero, fundamentalmente, vi sigue siendo ejecutado internamente. Realmente no puedes engañarlo.
Es como una de esas piñatas, cosas que tienen dulces adentro pero encima tienen capas y capas de papel maché. En realidad no tiene un concepto unificado. Creo que si tuviera que volver atrás, no lo haría, sino que comenzaría de nuevo.
En 1979, [3] Mary Ann Horton se hizo cargo de vi. Horton agregó compatibilidad con teclas de flecha y de función, macros y mejoró el rendimiento al reemplazar termcap por terminfo . [11] [22]
Hasta la versión 3.7 de vi, creada en octubre de 1981, [21] 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 el UNIX System V de AT&T (enero de 1983) adoptando vi, [23] los cambios en el código base de vi sucedieron más lentamente y de una manera más dispersa y mutuamente incompatible. En UC Berkeley, se hicieron 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 copias del código fuente de vi, y sus sistemas operativos, Solaris , HP-UX , Tru64 UNIX y AIX , continuaron manteniendo versiones de vi directamente descendientes de la versión 3.7, pero con características agregadas como asignaciones de teclas ajustables, cifrado y soporte de caracteres amplios.
En 1983, vi fue una de varias herramientas UNIX disponibles para el sistema operativo UNOS de Charles River Data Systems bajo la licencia de Bell Laboratories . [24]
Aunque los vendedores comerciales podían trabajar con el código base de Bill Joy, mucha gente no podía. Debido a que Joy había comenzado con el editor ed de Ken Thompson , ex y vi eran trabajos derivados y no podían distribuirse excepto a personas que tuvieran una licencia de código fuente de AT&T. [ cita requerida ] Aquellos que quisieran un editor gratuito de estilo Unix 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 STEVIE (ST Editor for VI Enthusiasts), un clon limitado de vi, apareció para Atari ST . [25] [26] 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, apuntando a un clon de vi más completo y más fiel que STEVIE. [27] Rápidamente atrajo un interés considerable en varias comunidades de entusiastas. [28] Andrew Tanenbaum pidió rápidamente a la comunidad que decidiera cuál de estos dos editores sería el clon de vi en Minix ; [29] se eligió a Elvis, y sigue siendo el clon de vi para Minix en la actualidad.
En 1989, Lynne Jolitz y William Jolitz comenzaron a adaptar BSD Unix para que funcionara en procesadores de la clase 386 , pero para crear una distribución libre necesitaban evitar cualquier código contaminado por AT&T, incluyendo el vi de Joy. Para llenar el vacío dejado por la eliminación de vi, su distribución 386BSD de 1992 adoptó Elvis. Los descendientes de 386BSD, FreeBSD y NetBSD , siguieron el ejemplo. Pero en UC Berkeley, Keith Bostic quería un reemplazo "compatible error por error" para el vi de Joy para 4.4BSD-Lite. Usando Elvis (versión 1.8) de Kirkendall como punto de partida, Bostic creó nvi , lanzándolo en la primavera boreal de 1994. [30] Cuando FreeBSD y NetBSD resincronizaron el código base de 4.4-Lite2, ellos también cambiaron al nvi de Bostic, que continúan usando hoy. [30]
A pesar de la existencia de clones de vi con conjuntos de características mejorados, en algún momento antes de junio de 2000, [31] Gunnar Ritter portó el código base vi de Joy (tomado de 2.11BSD, febrero de 1992) a los sistemas operativos modernos basados en Unix, como Linux y FreeBSD. Inicialmente, su trabajo era técnicamente ilegal para distribuir sin una licencia de código fuente de AT&T, pero, en enero de 2002, esas reglas de licencia se relajaron, [32] permitiendo la distribución legal como un proyecto de código abierto. Ritter continuó haciendo pequeñas mejoras al código base vi similares a las realizadas por los proveedores comerciales de Unix que todavía 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. [33]
Pero aunque el vi de Joy estaba ahora disponible de nuevo para BSD Unix, llegó después de que las distintas versiones de BSD se hubieran comprometido con nvi, que aportaba una serie de mejoras con respecto al vi tradicional y abandonaba algunas de sus características heredadas (como el modo abierto para editar una línea a la vez). Por tanto, BSD Unix, donde comenzó el código base vi de Joy, ya no lo utiliza, y los Unix derivados de AT&T , que en sus inicios carecían del editor de Joy, son los que ahora utilizan y mantienen versiones modificadas de su código.
Con el paso de los años desde su creación, vi se convirtió en el editor estándar de facto de Unix y en el favorito de los hackers fuera del MIT hasta el surgimiento de Emacs después de aproximadamente 1984. [34] La Especificación Única de UNIX especifica vi, por lo que todo sistema conforme debe tenerlo.
Los usuarios de la familia de sistemas operativos Unix siguen utilizando ampliamente vi. Aproximadamente la mitad de los encuestados en una encuesta de USENET de 1991 preferían vi. [35] En 1999, Tim O'Reilly , fundador de la empresa de publicación de libros de informática del mismo nombre, afirmó que su empresa vendió más copias de su libro vi que de su libro sobre Emacs. [36]
vi es un editor modal: opera 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 controlan la sesión de edición). Por ejemplo, escribir imientras se está en modo de comando cambia el editor al modo de inserción, pero escribir de nuevo en este punto coloca un carácter "i" en el documento. Desde el modo de inserción, presionar cambia el editor nuevamente 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 retirar las manos del usuario de la fila de inicio . Como los editores no modales generalmente tienen que reservar todas las teclas con letras y símbolos para la impresión de caracteres, cualquier comando especial para acciones distintas a agregar texto al búfer debe asignarse a teclas que no produzcan caracteres, como teclas de función o combinaciones de teclas modificadoras como , y con teclas regulares. Vi tiene la propiedad de que la mayoría de las teclas comunes están conectadas a algún tipo de comando para posicionar, alterar texto, buscar, etc., ya sea individualmente o en combinaciones de teclas. Muchos comandos se pueden escribir sin tocar el teclado sin usar o . Otros tipos de editores generalmente requieren que el usuario mueva sus manos desde la fila de inicio cuando escribe sin tocar el teclado :iESCCtrlAltCtrlAlt
Por ejemplo, en vi, reemplazar una palabra es replacement text , que es una combinación de dos comandos independientes (change y word-motion) 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 otra ubicación escribiendo , con el efecto de que la palabra que comienza en esa ubicación se reemplazará con el mismo texto de reemplazo.cwEscape.
Un libro de texto sobre interacción hombre-ordenador 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 los educadores de HCI de todo el mundo) es la falta de retroalimentación del editor vi al cambiar de modo. Muchos usuarios cometieron el error de proporcionar información mientras estaban en modo de comando o de ingresar un comando mientras estaban en modo de entrada". [37]
:set compatible
{{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )¿VIM es un derivado de otro clon de VI o empezaste desde cero? Empecé con Stevie. Se trataba de un clon de Vi para el ordenador Atari ST, adaptado al Amiga. Tenía muchos problemas y no podía hacer todo lo que Vi podía hacer, pero como el código fuente estaba disponible, pude solucionarlo yo mismo.