Tabla de Contenidos
Esta introducción del editor vi no es necesaria para los usuarios experimentados de UNIX. El editor vi, originalmente desarrollado por Bill Joy de Sun Microsisten, es extensible sin límites, un editor ASCII ligero fácil de usar y complica la existencia de los principiantes. Esta sección introducirá el editor vi a los principiantes y quizás refresque también algunas ideas a los usuarios experimentados.
La primera parte de esta sección describirá la edición, guardado, copiado/pegado y navegación por un archivo en una sesión vi. La segunda parte será un ejemplo paso a paso de una sesión vi para ayudarle a empezar.
Esto está pensado como esquema para usar el editor vi, esto en ningún caso es una guía detallada. Es una primera toma de contacto para el usuario y que pueda utilizar vi con soltura para realizar cambios y crear archivos.
La utilización del editor vi realmente no es muy diferente de la de cualquier otro software basado en terminal, con una excepción, no utiliza una interfaz de estilo de tipo de etiqueta (o curses[1]), aunque muchas versiones de vi utilizan curses que no dan el mismo aspecto y sensación que la típica interfaz basada en terminal. En cambio esta trabaja en dos modos: comando y editor. Mientras que esto puede resultar extraño, no es muy diferente que los editores basados en ventanas si piensa en ello. Considere el siguiente ejemplo, si usted está utilizando el gedit y toma el ratón, para seleccionar algún texto, selecciona cortar y luego pegar, está utilizando la mayor parte del tiempo el ratón y no está editando (aun cuando puede). En vi, la misma acción se realiza simplemente eliminando la línea entera en modo comando con dd, moviéndose hasta la línea donde desea colocarlo debajo y pulsando p en modo comando. Uno casi podría decir que es análogo el “modo ratón vs. modo comando” (aunque no sean exactamente idénticos, conceptualmente la idea es similar).
Para iniciar una sesión vi, uno empieza simplemente como haría con cualquier software basado en terminal:
$vifilename
Una nota importante a recordar aquí es que cuando un archivo es editado, este es cargado en un buffer[2] de memoria. El resto del texto hará referencia al buffer y al archivo en su contexto apropiado. Un archivo solamente cambia cuando el usuario ha confirmado los cambios con uno de los comandos de escritura.
El editor vi soporta una gama de opciones que uno puede proporcionar al inicio, por el momento empezaremos solamente viendo el inicio por defecto. Cuando se invoca como se muestra arriba, el modo de inicio por defecto del editor es en modo comando, no pudiendo comenzar a escribir en el buffer. En cambio debe salir del modo comando para introducir texto. El siguiente texto describe los modos de inicio de edición:
| a | Añadir después. |
| A | Añadir al final de la línea. |
| C | Cambiar el resto de la línea actual. |
| cw | Cambiar la palabra actual. |
| i | Insertar antes del cursor. |
| I | Insertar al principio de la línea. |
| o | Abrir una línea debajo para insertar |
| O | Abrir una línea encima para insertar. |
Por supuesto, conocer los comandos de edición no es muy útil si no puede volver al modo comando y guardar el archivo, para volver atrás (a modo comando) simplemente pulse la tecla ESC. Para introducir determinados comandos (también comandos que son combinaciones de varios comandos), se deben utilizar los dos puntos (:).
Pulsar los dos puntos pondrá al usuario en el prompt de los dos puntos (o de comando si lo prefiere) en la parte inferior izquierda de la pantalla. Ahora veamos los comandos de guardado:
| :w | Escribe el buffer en el archivo (Graba las modificaciones efectuadas en el archivo). |
| :wq | Escribe el buffer en el archivo y sale (Graba cambios y sale). |
¿Qué editor no puede manipular bloques de texto? Por supuesto vi también soporta esta característica y como la mayoría de los comandos de vi es algo intuitivo. Para copiar una línea pero sin suprimirla, simplemente ponga yy o Y en modo comando y la línea actual será copiada dentro del buffer. Para pegar la línea en algún sitio, navegue hasta la línea de arriba de donde tiene que ser puesta la línea y pulse la tecla p para el comando “put” (poner). Para mover una línea, simplemente suprima la línea entera con el comando dd, navegue y pegue.
La mayoría de manuales o tutoriales de vi comienzan con la navegación, sin embargo, al igual que la mayoría de los editores, para navegar por un archivo debe de haber algo por lo que navegar (de ahí que hayamos empezado al contrario). Según su preferencia por vi (o incluso si es vi y no elvis, nvi o vim) puede navegar en ambos modos: editor y comando.
Para los principiantes se que cambiar a modo comando y después navegar es un poco duro hasta que uno haya practicado. Las teclas de navegación para los terminales que no reconocen o soportan el uso de los cursores son las siguientes:
| k | Mueve el cursor hacia arriba una línea. |
| j | Mueve el cursor hacia abajo una línea. |
| l | Mueve el cursor a la derecha un carácter. |
| h | Mueve el cursor a la izquierda un carácter. |
Si el terminal los reconoce y soporta, los cursores pueden ser utilizados para navegar por el buffer en modo comando.
Además de “una navegación por puntos” simple, vi soporta saltos a una línea simplemente escribiendo el número de la línea en el prompt de dos puntos. Por ejemplo, si quiere saltar a la línea 223 lo que teclearía en el modo editor sería algo así:
ESC
:223
El editor vi soporta búsquedas utilizando sintaxis de expresiones regulares, sin embargo, es ligeramente distinto invocarlas desde el modo comando. Una simple pulsación de la tecla / en modo comando e introduzca lo que quiere buscar, como ejemplo puede decir que busca la expresión foo:
/foo
Esto es, para ilustrar una expresión ligeramente diferente, puede decir que busca foo bar:
/foo bar
Las búsquedas y los desplazamientos no son las únicas formas de vi para navegar por el buffer. Lo siguiente es una breve lista de comandos de navegación admitidos por vi:
| 0 | Mueve al inicio de la línea. |
| $ | Mueve al final de la línea. |
| b | Retrocede una palabra. |
| w | Avanza una palabra. |
| G | Mueve a la parte inferior del buffer. |
| H | Mueve a la línea superior de la pantalla (esquina superior izquierda de la pantalla). |
| L | Mueve a la última línea de la pantalla (esquina inferior izquierda de la pantalla). |
| M | Mueve el cursor al medio de la pantalla. |
| N | Explora para el siguiente conjunto de búsqueda pero en dirección opuesta. |
| n | Explora para el siguiente conjunto de búsqueda en la misma dirección . |
Ahora que hemos cubierto lo básico, iniciemos una sesión de ejemplo utilizando algunos de los elementos vistos anteriormente. Primero, abrimos un archivo vacío en el buffer desde la línea de comandos tal que así:
#vi foo.txt
Seguidamente, cambiamos al modo editor e introducimos dos líneas separadas por una línea vacía, recordar que nuestro buffer está vacío así que pulsamos la tecla i para insertar delante del cursor e introducir algún texto:
Esto es algo de texto Allí saltamos una línea ~ ~ ~ ~
Ahora pulsamos la tecla ESC para volver al modo comando.
Ahora que estamos en modo comando, grabemos el archivo. Primero pulsamos la tecla :, el cursor debería situarse en la parte de la esquina inferior izquierda a la derecha del prompt. En el prompt : introducimos w y pulsamos la tecla ENTER o RETURN. El archivo acaba de grabarse. Debe de haber un mensaje a tal efecto, algunos editores vi también le dirían el nombre, cuantas líneas y el tamaño del archivo.
Es hora de navegar, el cursor debe de estar en la parte donde se quedó cuando se grabó el archivo. Intente utilizar los cursores para moverse al rededor de un trozo. Si no funcionan (o simplemente por curiosidad) pruebe con las teclas hjkl para ver como funcionan.
Finalmente, hagamos dos cosas más, primero, navegue hasta la primera línea y luego al primer carácter. Pruebe alguna de las otras teclas de navegación del modo comando sobre esa línea, pulse las siguientes teclas dos o tres veces:
$
0
$
0
El cursor debería saltar al final de la línea, volver al principio y luego al final otra vez.
Después, busque por una expresión pulsando la tecla / y poniendo una expresión tal que así:
/saltamos
El cursor debería saltar a la primera coincidencia de saltamos.
Ahora guarde el archivo y salga utilizando escribir (write) y salir (quit):
:wq
El editor estándar suministrado con NetBSD es, y no necesita decirse, vi, el editor más amado y odiado del mundo. Si no utiliza vi, sáltese esta sección, en caso contrario léala antes de la instalación de otras versiones de vi. El vi de NetBSD (nvi) fue escrito por Keith Bostic de UCB para tener una versión libre de redistribuir de este editor y tiene muchas extensiones de gran alcance dignas de aprender mientras que sigue siendo muy compatible con el vi original. Nvi se ha convertido en la versión estándar de vi para BSD.
Entre las extensiones más interesantes están:
Expresiones regulares extendidas (estilo egrep), permitidas con la opción extended.
Apilado de Etiquetas.
Infinitos deshacer (para deshacer, presionar u; para continuar deshaciendo, presionar .).
Búsqueda incremental, permitida con la opción searchincr.
Desplazamiento izquierda-derecha de líneas, permitido con la opción leftright; el número de columnas a desplazar es definido por la opción sidescroll.
Edición del Histórico de la línea de comandos, permitido con la opción cedit.
Terminación del nombre de fichero, permitido con la opción filec.
Fondos de pantalla y de distribuciones.
Dividir la pantalla de edición.
El ejemplo siguiente muestra un archivo .exrc con algunas opciones extendidas habilitadas.
set showmode ruler set filec=^[ set cedit=^[
La primera línea habilita el diseño de la posición del cursor (fila y columna) y el modo actual (Comando, Insertar, Añadir) sobre la línea de estado. La segunda línea (donde ^[ es el carácter ESC) habilita la terminación de nombres de archivo con el carácter ESC. La tercera línea habilita la edición del histórico de la línea de comando (también con el carácter ESC). Por ejemplo, escribiendo “:” y después presionando ESC se muestra una ventana con una lista de los comandos previos los cuales pueden ser editados y ejecutados (presionando Enter sobre uno de los comandos lo ejecuta).
El código fuente tarball (src.tgz) contiene mucha documentación útil sobre (n)vi y ex, en el directorio /usr/src/usr.bin/vi/docs. Por ejemplo:
Editor: Un tutorial
Manual de Referencia Ex
Página de ayuda de Vi
Una Introducción para Mostrar la Edición con Vi por William Joy y Mark Horton
Manual de Referencia Ex/Vi por Keith Bostic
Referencia de Comando y Función de Vi
Tutorial de Vi (principiante y avanzado)
Si nunca ha utilizado vi, el “tutorial de Vi” es un buen punto te partida. Se propone para ser leído usando vi y gradualmente va introduciendo al lector en todos los comandos de vi, que pueden ser probados durante la lectura. Una Introducción para Mostrar la Edición con Vi de William Joy y Mark Horton es también un buen punto de partida.
Si quiere leer más sobre vi y las extensiones de nvi debería leer el Manual de Referencia Ex/Vi de Keith Bostic que documenta todos los comandos y opciones del editor.
Este tema no está relacionado directamente con NetBSD pero puede ser útil, por ejemplo, para examinar el código fuente del núcleo.
Cuando examina un conjunto de código fuente en un árbol de directorios y subdirectorios, simplemente puede trabajar utilizando la característica tag (etiqueta) de vi. El método es el siguiente:
cd hasta el directorio base del código fuente.
$cd/path
Escriba los siguientes comandos:
$find . -name "*.[ch]" >filelist$catfilelist| xargs ctags
añada la siguiente línea a .exrc
set tags=/path/tags
(sustituya path por la ruta correcta).