# Vi

Vi es un editor de texto desarrollado para el sistema operativo Unix. Fue concebido como una interfaz visual del editor ex y está enfocado en la pantalla. A diferencia de su predecesor ed, que era un editor de líneas y solo tenía la capacidad de mostrar una línea a la vez, este permite la visualización completa del texto en pantalla y puede ser manipulado mediante distintos modos.
Como editor de texto, presenta notables diferencias en comparación con un procesador de texto convencional. A diferencia de estos últimos, Vi no ofrece herramientas visuales para anticipar la apariencia impresa del documento ni proporciona funciones avanzadas de formateo, como el centrado y la justificación de párrafos. No obstante, destaca por su versatilidad en la manipulación de texto, permitiendo a los usuarios mover, copiar, eliminar e insertar caracteres de manera eficiente. Es apreciado por programadores para redactar el código fuente de programas y por administradores de sistemas para modificar archivos, así como para escribir scripts que automatizan tareas.
Una de sus características importante es su presencia en la mayoría de los sistemas Unix y tipo Unix, donde se utiliza tanto su versión original como versiones mejoradas del mismo. Entre estas, la más notable es Vim, una versión mejorada y ampliamente utilizada en el sistema operativo Linux.

## Historia

El editor de texto Vi fue concebido en 1976 por Bill Joy. En ese año, Ken Thompson, el ingeniero creador de Unix, visitó la Universidad de California en Berkeley (UC Berkeley) llevando consigo un compilador de Pascal para Unix que presentaba problemas y requería reparación. Joy, estudiante de la Universidad de Berkeley, asumió la responsabilidad de corregir los errores del compilador. En el proceso, se empleaba el editor predeterminado de Unix, conocido como ed. A medida que pasaban los días, Joy comenzó a percibir las limitaciones en ed y sus comandos oscuros.
Durante el verano de 1976, George Coulouris hizo una entrada destacada en Berkeley con un DECtape que contenía em, un editor de texto innovador que generó opiniones divididas. Algunos lo tildaron de devorador de recursos, mientras que otros, entre ellos Bill Joy, quedaron impresionados por las posibilidades que ofrecía. Inspirados tanto por em com ed, Joy y Chuck Hely crearon un nuevo editor denominado en, que posteriormente evolucionó a ex. En 1977, Bill Joy introdujo el revolucionario modo visual a ex, dando origen vi.
La denominación vi tiene su origen en el comando abreviado de ex (vi), utilizado para ingresar al modo visual desde el editor. Con el correr del tiempo, vi se convirtió en el nombre ejecutable que se invoca desde la shell de Unix.
Para el desarrollo de Vi, Bill Joy realizó su labor desde una terminal ADM-3A. En el teclado de esta terminal, la tecla Escape se encuentra en el extremo izquierdo, una disposición que guarda similitud con la ubicación de la tecla Tab ↹ en los teclados modernos. La singular disposición de las teclas, sumada a la lentitud inherente de esta terminal, desempeñaron un papel crucial en la gestación de los atajos de teclado y comandos abreviados característicos de Vi. Muchos de estos atajos y comandos han perdurado y han sido heredados por sus sucesores, como es el caso de vim.

## Modos

El editor vi tiene dos modos de operación:

### Modo de comandos

En el modo de comandos, podemos desplazarnos dentro de un archivo y efectuar operaciones de edición como buscar texto, eliminar texto, modificar texto, etc. Vi suele iniciarse en modo de comandos.

### Modo insertar

En el modo insertar, podemos escribir texto nuevo en el punto de inserción de un archivo. Para volver al modo de comandos, presione la tecla esc.

## Órdenes más comunes

Para usar vi, estos son los comandos esenciales para escribir, editar, borrar, copiar y pegar.

### Editar y modificar

* Para insertar texto antes del cursor: i
* Para insertar texto después del cursor: a
* Para insertar texto al principio de la línea: I
* Para insertar texto al final de la línea: A

### Copiar y pegar

* Para copiar la línea actual: yy
* Para copiar una palabra: yw
* Para copiar 7 líneas: y7y
* Para pegar después del cursor: p
* Para pegar antes del cursor: P

### Borrar

* Para borrar un carácter: x o X
* Para borrar la línea actual: dd

### Abrir, guardar y salir

* Para abrir un archivo: :e nombre_de_archivo
* Para guardar los cambios y salir: :x o :wq o ⇧ Mayús+ZZ
* Para salir: :q
* Para salir sin guardar (forzar la salida): :q!
* Para guardar con otro nombre de archivo: :w nombre_de_archivo
Para pasar de modo edición a modo de comandos se emplea la tecla ESC, para desplazarse sobre el archivo se emplean las teclas j (abajo), k (arriba), h (izquierda) y l (derecha).
También puede emplear las flechas si su terminal lo permite, Ctrl+U (PgUp), Ctrl+D (PgDn).
Para ir a una línea específica puede escribir el número de la línea seguido de gg o G, por ejemplo 25G o también puede utilizar : seguido del número de línea y ↵ Entrar. Para mostrar el número de las líneas, se puede ejecutar :set number, y para quitar los números :set nonumber. Para ir al final de la línea en la que está el cursor $, para ir al comienzo 0. Para llegar al inicio del archivo 1G o gg y para llegar al final del archivo G. Para buscar un texto: /texto seguido del texto que desea buscar y ↵ Entrar. Luego puede presionar n o N para el siguiente o anterior resultado de la búsqueda. Después de hacer cambios puede salvarlos con :w o para salvar y salir puede emplear ZZ. Para ejecutar un comando del intérprete de comandos puede emplear :! seguido del comando y ↵ Entrar. Si se escribe :set verbose showmode, se podrá ver en la esquina inferior derecha el modo en el que se está, ya sea comandos o de edición. Puedes teclear :set all para ver las opciones disponibles.
Una de las utilidades más comunes es el uso de :wq que corresponde a la unión de las opciones guardar ( w ) y salir ( q ), o bien el modo forzado es :q! que sale de vi sin guardar cambios.
Si se desea consultar otro comando, ya sea del editor vi o de cualquier otro, puedes revisar el manual en línea que tiene el sistema UNIX, tecleando: $ man comando, por ejemplo: man vi