guidea

Apéndice A

Introducción a vi

vi (pronunciado "vi ai" en inglés, o "uve i") es en realidad el único editor que se puede encontrar en prácticamente cualquier instalación de Unix. Este editor fue escrito originalmente en la Universidad de California en Berkeley y se puede encontrar versiones en casi cualquier edición de Unix, incluido Linux. Al principio cuesta un poco acostumbrarse a él, pero tiene muchas características muy potentes. En general, recomendamos que un nuevo usuario aprenda Emacs, que generalmente es más fácil de usar. Sin embargo, la gente que usa más de una plataforma o que encuentra que no le gusta Emacs, puede estar interesada en aprender vi.

Es necesaria una breve reseña histórica de vi para comprender cómo la tecla |_k_| puede significar mover el cursor arriba una línea y porqué hay tres diferentes modos de uso. Si no le apetece aprender a usar el editor, los dos tutoriales le llevarán de ser un crudo principiante hasta tener el suficiente conocimiento del grupo de comandos que usted puede llegar a usar. El capítulo también incluye una guía de comandos, que sirve de útil referencia para tenerla cerca del terminal.

Incluso si vi no se convierte en su editor de texto normal, el conocimiento de su uso no será desperdiciado. Es casi seguro que el sistema de Unix que use tendrá alguna variante del editor vi.

Puede ser necesario usar vi mientras instala otro editor, como Emacs. Muchas herramientas de Unix, aplicaciones y juegos usan un subconjunto del grupo de comandos de vi.

A.1 Una rápida historia de Vi

Los editores de texto en la antigüedad funcionaban en modo de una línea y se usaban típicamente desde terminales no inteligentes de impresión. Un editor típico que operaba en este modo es Ed. El editor es potente y eficiente, y usa una cantidad muy pequeña de recursos del sistema, y funcionaba con las pantallas de aquel entonces. vi ofrece al usuario una alternativa visual con un grupo de comandos notablemente amplio comparado con ed.

vi como lo conocemos hoy comenzó como el editor de línea ex. De hecho, ex se ve como un modo especial de edición en vi, aunque ahora lo contrario es verdad. El componente visual de ex puede ser iniciado desde la línea de comando usando el comando vi, o desde dentro de ex.

El editor ex/vi fue desarrollado en la universidad de California en Berkeley por William Joy. Originalmente se suministraba como una utilidad no soportada hasta su inclusión oficial en la distribución del Unix AT&T System V. Se ha ido haciendo cada vez más popular, incluso con la competencia de los modernos editores de pantalla completa.

Debido a la popularidad de vi existen muchas variantes clónicas y se pueden encontrar varias versiones para la mayoría de los sistemas operativos. No es el propósito de este capítulo el incluir todos los comandos disponibles bajo vi o sus variantes. Muchos clones han aumentado y modificado el comportamiento original de vi. La mayoría de los clones no soportan todos los comandos originales de vi.

Si tiene un buen conocimiento de trabajo con ed entonces vi presenta una curva de aprendizaje más suave. Aunque usted no tenga ninguna intención de usar vi como su editor regular, el conocimiento básico de vi solamente puede serle una ventaja.

A.2 Rápido tutorial de Ed

El propósito de esta guía es que usted empiece a usar ed. ed está diseñado para ser fácil de usar, y requiere poco entrenamiento para comenzar. La mejor manera de aprender es practicando, así que siga las instrucciones y pruebe el editor antes de descontar sus ventajas prácticas.

A.2.1 Crear un fichero

ed sólo puede editar un fichero a la vez. Siga el siguiente ejemplo para crear su primer fichero de texto usando ed.

/home/larry$ ed

a

Este es mi primer fichero de texto usando Ed.

Esto es divertido de verdad.

.

w primero.txt

q

/home/larry$

Ahora puede verificar el contenido del fichero usando la utilidad de concatenación de Unix.

/home/larry$ cat primero.txt

El ejemplo anterior ha mostrado un número de puntos importantes. Cuando invoca ed como en el ejemplo tendrá un fichero vacío. La tecla |_a_| se usa para añadir texto al fichero. Para finalizar la sesión de entrada de texto, se usa un punto |_._| en la primera columna del texto. Para salvar el texto a un fichero, la tecla |_w_| se usa en combinación con el nombre del fichero y finalmente la tecla |_q_| se usa para salir del editor.

La observación más importante es que hay dos modos de operación. Al principio el editor está en modo de comandos. Un comando se define por caracteres, para asegurarse de cuales son las intenciones del usuario, ed usa un modo de texto, y un modo de comando.

A.2.2 Editar un fichero existente

Para añadir una línea de texto a un fichero existente siga el siguiente ejemplo:

/home/larry$ ed primero.txt

a

Esta es una nueva linea de texto.

.

w

q

Si comprueba el fichero con cat verá que hay una nueva línea insertada entre las dos líneas originales. ¿Cómo supo ed dónde poner la nueva línea de texto?.

Cuando ed lee el fichero, se acuerda de cual es la línea actual. El comando |_a_| añadirá el texto después de la línea actual. ed también puede poner el texto antes de la línea actual con la tecla |_i_|. El efecto será la inserción del texto antes de la línea actual.

Ahora es fácil ver que ed opera en el texto línea por línea. Todos los comandos se pueden aplicar a una línea elegida.

Para añadir una línea de texto al final de un fichero.

/home/larry$ ed primero.txt

$a

La ultima linea de texto.

.

w

q

El modificador de comandos ||_$_|| le dice a ed que añada la línea después de la última línea. Para añadir la línea despues de la primera línea el modificador sería |_1_|. Ahora tenemos la posibilidad de seleccionar la línea para añadir una línea de texto después del número de línea o insertar una línea antes del número de línea.

¿Cómo sabemos lo que hay en la línea actual? El comando |_p_| muestra el contenido de la línea actual. Si quiere hacer que la línea actual sea la línea 2, y a la vez quiere ver el contenido de esa línea entonces haga lo siguiente.

/home/larry$ ed primero.txt

2p

q

A.2.3 Números de línea en detalle

Ha visto cómo mostrar el contenido de la línea actual, usando el comando |_p_|. También sabemos que hay modificadores del número de línea para los comandos. Para ver el texto de la segunda línea,

2p

Hay algunos modificadores especiales que se refieren a posiciones que pueden cambiar durante el tiempo que edita un fichero. El ||_$_||es la última línea del texto. Para ver la última línea,

$p

El número de línea actual usa un símbolo de modificador especial ___|_.|. Para mostrar la línea actual usando un modificador,

.p

Esto puede parecer innecesario, aunque es muy útil en el contexto de los grupos de números de línea.

Para mostrar el contenido del texto desde la línea 1 a la línea 2, se le debe pasar el alcance.

1,2p

El primer número se refiere a la línea de comienzo y el segundo se refiere a la última línea. La línea actual será por consiguiente el segundo número del grupo de líneas.

Si quiere mostrar el contenido del fichero desde el comienzo hasta la línea actual,

1,.p

Para mostrar el contenido desde la línea actual hasta el final del fichero,

.,$p

Todo lo que queda es mostrar el contenido de todo el fichero, y esto queda como un ejercicio para usted.

¿Cómo puede borrar las dos primeras líneas del fichero?

1,2d

El comando |_d_| borra el texto línea por línea. Si usted quisiera borrar el contenido completo, lo haría con:

1,$d

Si usted ha hecho muchos cambios y no quiere salvar los contenidos del fichero, lo mejor es salir del editor sin escribir el fichero antes.

La mayoría de los usuarios no usan ed como el principal editor. Los editores más modernos ofrecen una pantalla completa de edición y grupos de comandos más flexibles. ed ofrece una buena introducción a vi y ayuda a explicar cómo se originaron los comandos de vi.

A.3 Rápido tutorial de Vi

El propósito de este tutorial es que comience a usar el editor vi. Este tutorial asume que no tiene ninguna experiencia con vi, así que le mostraremos los diez comandos más básicos de vi. Estos comandos fundamentales son suficientes para realizar la mayoría de sus necesidades de edición, y puede expandir su vocabulario de vi cuanto necesite. Se recomienda que tenga un ordenador para practicar, según avanza con el tutorial.

A.3.1 Ejecutar vi

Para ejecutar vi, simplemente tiene que teclear las letras vi seguidas del nombre de fichero que desea crear. Verá una pantalla con una columna de tildes (~) en el lado izquierdo. vi está ahora en modo de comando. Cualquier cosa que teclee será interpretado como un comando, no como texto que usted desea escribir. Para introducir texto, tiene que teclear un comando. Los dos comandos de entrada básicos son los siguientes:

i insertar texto a la izquierda del cursor.

a añadir texto a la derecha del cursor.

Dado que está al comienzo de un fichero vacío, no importa cual de estos usar. Escriba uno de ellos, y después teclee el siguiente texto (un poema de Augustus DeMorgan encontrado en The Unix Programming Environment por B.W. Kernighan y R. Pike):

Las pulgas grandes tienen pequeñas pulgas<Intro>

sobre sus espaldas para que les muerdan.<Intro>

Y las pulgas pequeñas tienen pulgas más pequeñas<Intro>

y así hasta el infinito.<Intro>

Y las pulgas grandes, a su vez,<Intro>

tienen pulgas más grandes sobre las que estar;<Intro>

Mientras que estas de nuevo tienen otras más grandes aun,<Intro>

y más grandes aun, y así.<Intro>

<Esc>

Fíjese que tiene que pulsar la tecla |_Esc_| para finalizar la inserción y volver al modo de comando.

A.3.2 Comandos de movimiento del cursor

h mueve el cursor un espacio a la izquierda.

j mueve el cursor un espacio abajo.

k mueve el cursor un espacio arriba.

l mueve el cursor un espacio a la derecha.

Estos comandos se pueden repetir manteniendo la tecla pulsada. Intente mover el cursor por el texto ahora. Si intenta un movimiento imposible, por ejemplo, pulsar la tecla |_k_| cuando el cursor está en la línea superior, la pantalla parpadeará momentáneamente o el terminal sonará. No se preocupe, no muerde, y su fichero no saldrá dañado.

A.3.3 Borrar texto

x borra el carácter que hay en el cursor.

dd borra la línea donde está el cursor.

Mueva el cursor a la primera línea y póngalo de modo que esté bajo la n. Pulse la letra |_x_|, y la n desaparecerá. Ahora pulse la letra |_i_| para cambiarse al modo de inserción y vuelva a teclear la n. Pulse |_Esc_| cuando haya terminado.

A.3.4 Salvar un fichero

:w salvar (escribir al disco).

:q salir.

Asegúrese de que está en modo de comando pulsando la tecla |_Esc_|. Ahora pulse :w. Esto salvará su trabajo escribiéndolo a un fichero de disco.

El comando para salir de vi es |_q_|. Si quiere combinar el salvar y salir, escriba :wq. También hay una abreviación para :wq _ ZZ. Dado que gran parte del trabajo de programación consiste en ejecutar un programa, encontrar algún problema y llamar el programa en el editor para hacer algún pequeño cambio, y luego volver a salir del editor para ejecutar el programa otra vez, ZZ será un comando que usará a menudo. (En realidad, ZZ no es un sinónimo exacto de :wq _ si no ha hecho ningún cambio al fichero que está editando desde la ultima vez que lo salvo, ZZ simplemente saldrá del editor mientras que :wq salvará (redundantemente) el fichero antes de salir).

Si usted se lo ha cargado todo sin esperanzas y simplemente quiere volver a empezarlo todo, puede teclear :q! (recuerde pulsar la tecla |_Esc_| primero). Si omite el !, vi no le permitirá salir sin salvar.

A.3.5 ¿Qué viene a continuación?

Los diez comandos que acaba de aprender deberían ser suficientes para su trabajo. Sin embargo, solamente ha rozado la superficie del editor vi. Hay comandos para copiar material de un lugar del fichero a otro, para mover material de un lugar a otro, para mover material de un fichero a otro, para ajustar el editor a sus gustos personales, etc. Con todo, hay unos 150 comandos.

A.4 Tutorial avanzado de Vi

La ventaja y la potencia de vi está en la habilidad de usarlo con éxito con sólo saber unos pocos comandos. La mayoría de los usuarios de vi se sienten un poco incómodos al principio, sin embargo después de algún tiempo se encuentran ávidos de mayor conocimiento de los comandos disponibles.

El siguiente tutorial asume que el usuario ha completado el tutorial rápido (arriba) y por lo tanto se siente a gusto con vi. Este tutorial expone algunas de las características más poderosas de ex/vi desde copiar texto hasta la definición de macros. Hay una sección sobre ex y los parámetros para ajustar el editor a su gusto. Este tutorial describe los comandos, en vez de llevarle grupo por grupo.

Se recomienda que usted disponga de algún tiempo para probar los comandos en algún texto de ejemplo, que se pueda permitir destruir.

Este tutorial no expone todos los comandos de vi, aunque se cubren los más comúnmente usados y aún otros adicionales. Aunque usted elija usar otro editor de texto, se espera que apreciará vi y lo que ofrece a quienes deciden usarlo.

A.4.1 Movimiento

La funcionalidad más básica de un editor es el mover el cursor por el texto. Aquí están los comandos de movimiento.

h mueve el cursor un espacio a la izquierda.

j mueve el cursor una línea hacia abajo.

k mueve el cursor una línea hacia arriba.

l mueve el cursor un espacio a la derecha.

Algunas implementaciones también permiten el uso de las teclas de cursor para mover el cursor.

w mueve al principio de la siguiente palabra.

e mueve al final de la siguiente palabra.

E mueve al final de la siguiente palabra antes de un espacio.

b mueve al principio de la palabra anterior.

0 mueve al principio de la línea actual.

^ mueve a la primera palabra de la línea actual.

$ mueve al final de la línea.

<CR> mueve al principio de la siguiente línea.

- mueve al principio de la línea anterior.

G mueve al final del fichero.

1G mueve al principio del fichero.

nG mueve a la línea n.

<Cntl> G muestra el número de línea actual.

% va al paréntesis correspondiente.

H mueve a la línea superior en pantalla.

M mueve a la línea de en medio de la pantalla.

L mueve al final de la pantalla.

n_ mueve el cursor a la columna n.

El texto se desplaza automáticamente cuando el cursor alcanza la parte superior o inferior de la pantalla. También hay comandos que permiten controlar el desplazamiento del texto.

<Cntl> f desplaza una pantalla hacia delante.

<Cntl> b desplaza una pantalla hacia atrás.

<Cntl> d desplaza media pantalla hacia abajo.

<Cntl> u desplaza media pantalla hacia arriba

Los comandos anteriores controlan el movimiento del cursor. Algunos de los comandos usan un modificador de comandos en la forma de un número que precede al comando. Esta característica normalmente repite el comando ese número de veces.

Para mover el cursor ocho posiciones a la izquierda.

8l mueve el cursor 8 posiciones a la izquierda.

Si desea introducir un número de espacios delante de un texto, podría usar el modificador de comandos con el comando insertar. Introduzca el número de repeticiones (n) y después |_i_| seguido por el espacio y luego pulse la tecla |_Esc_|.

ni inserta algún texto y lo repite n veces.

Los comandos que tratan con líneas usan el modificador para referirse al número de línea. El |_G_| es un buen ejemplo.

1G mueve el cursor a la primera línea.

vi tiene un voluminoso grupo de comandos que se puede usar para mover el cursor por el texto.

vi también puede posicionar el cursor en una línea desde la línea de comandos.

vi +10 mi_fichero.tex

Este comando abre el fichero llamado mi_fichero.tex y pone el cursor 10 líneas más abajo del comienzo del fichero.

Pruebe los comandos de esta sección. Muy poca gente los recuerda todos en una sola sesión. La mayor parte de los usuarios solamente utiliza una parte de estos comandos.

Ahora se puede mover, pero ¿cómo modificar el texto?

A.4.2 Modificación del texto

El propósito es cambiar el contenido del fichero y vi ofrece un amplio conjunto de comandos para ayudarnos en este proceso.

Esta sección se concentra en añadir texto, cambiar el texto existente y borrar texto. Al final de esta sección usted tendrá el conocimiento para crear cualquier fichero de texto que desee. Las secciones restantes se concentran en comandos más especializados y convenientes.

Cuando usted teclea nuevo texto puede introducir varias líneas usando la tecla |_Intro_|. Si hay que corregir un error tipográfico mientras introduce texto, puede usar la tecla |_Retroceso_| para mover el cursor sobre el texto. Las varias implementaciones de vi se comportan de manera diferente. Algunas simplemente mueven el cursor hacia atrás y el texto sigue viéndose y es aceptado. Otras borran el texto cuando pulsa la tecla de borrado. Otras versiones incluso permiten usar las teclas de cursores para mover el cursor mientras se está en modo de entrada de texto. Este modo de funcionamiento no es el normal de vi. Si el texto es visible y usa la tecla |_Esc_| mientras está en la línea en la que pulsó |_Retroceso_|, entonces el texto que hay después del cursor se borrará. Use el editor para acostumbrarse a este comportamiento.

a Añadir texto a partir de la posición actual del cursor.

A Añadir al final de la línea.

i Insertar texto a la izquierda del cursor.

I Insertar texto a la izquierda del primer caracter que no sea espacio en la línea actual.

o Abrir una nueva línea y añade texto debajo de la línea actual.

O Abrir una nueva línea y añade texto encima de la línea actual.

vi tiene un pequeño grupo de comandos para borrar texto que se pueden mejorar con el uso de modificadores.

x Borrar el carácter que está debajo del cursor.

dw Borrar desde la posición actual al final de la palabra.

dd Borrar la línea actual.

D Borrar desde la posición actual al final de la línea.

Los modificadores se pueden usar para aumentar la potencia de los comandos. Los siguientes ejemplos son un subgrupo de las posibilidades.

nx Borrar n caracteres desde el que está bajo el cursor.

ndd Borrar n líneas.

dnw Borrar n palabras (igual que ndw).

dG Borrar desde la posición actual hasta el final del fichero.

d1G Borrar desde la posición actual hasta el principio del fichero.

d$ Borrar desde la posición actual al final de la línea. (Esto es igual que D).

dn$ Borrar desde la línea actual al final de la enésima línea.

La lista de comandos anterior muestra que la operación de borrado puede ser muy útil. Esto se hace patente cuando se aplica en combinación con los comandos de movimiento de cursor. Hay que hacer notar que el comando |_D_| ignora los modificadores que se le apliquen.

En ocasiones usted puede necesitar deshacer los cambios al texto. Los siguientes comandos recuperan el texto que había antes de hacer cambios.

u Deshacer el último comando.

U Deshacer todos los cambios ocurridos en la línea actual.

:e! Editar otra vez. Recupera el estado del fichero desde la última vez que se salvó.

vi no sólo le permite deshacer cambios, también puede dar la vuelta al comando "deshacer". Por ejemplo, si usamos el comando |_5dd_| para borrar 5 líneas, se pueden recuperar usando el comando |_u_|. Si usted usa |_u_| una vez más, las 5 líneas desaparecerán de nuevo.

vi ofrece comandos que permiten que se hagan cambios al texto sin tener que borrar y volver a escribir:

rc Reemplaza del caracter bajo el cursor con la letra "c". Se Mueve el cursor al modificador de repetición, por ejemplo: 2rc.

R Sobreescribe el texto con el nuevo texto..

cw Cambia el texto de la palabra actual.

c$ Cambia el texto desde la posición actual al final de la línea.

cnw Cambia las siguientes n palabras. (Igual que ncw).

cn$ Hacer cambios hasta el final de la enésima línea.

C Hacer cambios hasta el final de la línea actual.

cc Hacer cambios en la línea actual.

s Sustituye el texto que escriba por el caracter actual.

ns Sustituye el texto que escriba por los siguientes n caracteres.

Las series de comandos de cambio que permiten que se introduzca un grupo de caracteres se terminan con la tecla |_Esc_|.

El comando |_cw_| empieza en la posición actual en la palabra y termina al final de la palabra.

Cuando use un comando de cambio que especifica la distancia sobre la que se aplicará el cambio, vi pondrá un $ en la última posición de carácter. El nuevo texto puede sobrepasar o no llegar a la longitud original de texto.

A.4.3 Copiar y mover bloques de texto

El movimiento de texto supone la combinación de un número de comandos para conseguir el propósito final. Esta sección introduce los buffers1 con y sin nombre junto a los comandos que cortan y pegan el texto.

La copia de texto se realiza en tres pasos principales:

1. Copia del texto a un buffer.

2. Movimiento del cursor al lugar de destino.

3. Pegar (poner) el texto en el buffer de edición.

El buffer de edición no es sino el propio fichero en el que usted está trabajando.

Para Copiar texto al buffer sin nombre use el comando |_y_|.

yy Mueve una copia de la línea actual al buffer sin nombre.

Y Mueve una copia de la línea actual al buffer sin nombre.

nyy Mueve las siguientes n lineas al buffer sin nombre.

nY Mueve las siguientes n líneas al buffer sin nombre.

yw Mueve una palabra al buffer sin nombre.

ynw Mueve n palabras al buffer sin nombre.

nyw Mueve n palabras al buffer sin nombre.

y$ Mueve el texto desde la posición actual al final de la línea al buffer sin nombre.

_____________________________________________

1 N. del T.: "buffer" es una palabra inglesa que se refiere a un espacio reservado en memoria para guardar alguna información temporalmente. En este caso se usan buffers para almacenar una copia temporal del texto que usted desea copiar o mover.

El buffer sin nombre es un buffer temporal que puede ser fácilmente afectado por otros comandos comunes. Hay ocasiones en las cuales necesitamos mantener el contenido de un buffer durante un período más extenso de tiempo. En este caso se usaría un buffer con nombre. vi tiene 26 buffers con nombre. Los buffers usan las letras del alfabeto como el nombre de identificación. Para distinguir un comando de un buffer con nombre, vi usa el carácter |_"_|. Cuando use un buffer con nombre de letra minúscula los contenidos se sobre escriben, mientras que el uso del nombre en letra mayúscula añade el nuevo texto al contenido actual.

"ayy Mueve la línea actual al buffer con nombre a.

"aY Mueve la línea actual al buffer con nombre a.

"byw Mueve la palabra actual al buffer con nombre b.

"Byw Añade la palabra actual al contenido del buffer b.

"by3w Mueve las siguientes 3 palabras al buffer b.

Use el comando |_p_| para pegar el contenido del buffer al buffer de edición.

p Pegar del buffer sin nombre a la DERECHA del cursor.

P Pegar del buffer sin nombre a la IZQUIERDA del cursor.

nP Pegar n copias del buffer sin nombre a la IZQUIERDA del cursor.

"aP Pegar del buffer con nombre "a" a la DERECHA del cursor.

"b3P Pegar 3 copias del buffer con nombre "b" a la IZQUIERDA del cursor.

Cuando use vi dentro de un xterm tiene otra opción para copiar texto. Marque el bloque de texto que desea copiar arrastrando el cursor del ratón sobre el texto. Si mantiene pulsado el botón izquierdo del ratón y arrastra el ratón desde el comienzo al final, invertirá el vídeo del texto. Esta operación automáticamente coloca el texto en un buffer reservado para el servidor de X Window.

Para pegar el texto, pulse el botón de enmedio. Acuérdese de poner vi en modo de inserción dado que la entrada de texto se podría interpretar como comandos y el resultado sería cuando menos desagradable. Usando la misma técnica se puede copiar una sola palabra haciendo doble click con el botón izquierdo del ratón sobre la palabra. Solamente se copiará esa única palabra. Para pegarla se usa el mismo procedimiento que anteriormente. Los contenidos del buffer sólo cambian cuando se marca otro bloque de texto.

Para mover un bloque de texto son necesarios tres pasos.

1. Borrar el texto para ponerlo en un buffer con o sin nombre.

2. Mover el cursor a la posición de destino.

3. Pegar el buffer.

El proceso es el mismo que el de copia con un solo cambio en el primer paso para borrar. Cuando

se usa el comando |_dd_|, la línea se borra y se coloca en el buffer sin nombre. Luego puede poner el

contenido del mismo modo que lo hizo cuando copió el texto en la posición deseada.

"add Borrar la línea y ponerla en el buffer con nombre a.

"a4dd Borrar cuatro líneas y ponerlas en el buffer con nombre a.

dw Borrar una palabra y ponerla en el buffer sin nombre.

Vea la sección sobre el modificado de texto para ver más ejemplos de borrado de texto.

En el caso de que el sistema falle, el contenido de todos los buffers se pierde excepto el contenido de los buffers de edición, que se puede recuperar (ver comandos Útiles).

A.4.4 Búsqueda y cambio de texto

vi dispone de varios comandos para búsqueda. Usted puede buscar desde un solo carácter hasta una expressión completa.

Los dos comandos principales de búsqueda basados en caracteres son |_f_| y |_t_|.

fc Encuentra el siguiente caracter c. Se mueve a la derecha del siguiente.

Fc Encuentra el siguiente caracter c. Se mueve a la izquierda del anterior.

tc Se mueve a la DERECHA al caracter anterior al siguiente c.

Tc Se mueve a la IZQUIERDA al carácter que sigue al c anterior. vi(En algunas esto es lo mismo que Fc).

; Repite el último comando f,F,t,T.

, Igual que (;) pero cambiando la dirección del comando original.

Si el caracter que usted buscaba no se encuentra, vi emitirá un pitido o le dará otro tipo de señal (tal vez un parpadeo de toda la pantalla).

vi le permite buscar una cadena de texto en el buffer de edición.

/tira Busca hacia la derecha y abajo la siguiente instancia de "tira".

?tira Busca hacia la izquierda y arriba la siguiente instancia de "tira".

n Repite el último comando / o ?.

N Repite el último comando / o ? en la dirección opuesta.

Cuando use los comandos ||/_||or |_?_|, la última línea en la parte baja de la pantalla se vaciará.

Introduzca en esa línea la tira de caracteres que desea buscar y pulse |_Intro_|.

La tira en el comando ||/_||or |_?_|puede ser una expresión regular. Una expresión regular puede ser una descripción de un conjunto de tiras. La descripción se construye usando texto entremezclado con caracteres especiales. Los caracteres especiales de una expresión regular son . * [ ] ^ $.

. Vale por cualquier carácter excepto el carácter de nueva línea.

" Tecla de "escape" para cualquier caracter especial.

* Vale por 0 o más instancias del caracter anterior.

[ ] Busca exactamente uno de los caracteres incluídos entre los corchetes.

^ El caracter que sigue a ^ debe estar al principio de la línea.

$ El caracter que precede a $ se busca al final de la línea.

[^] Busca cualquier cosa que no se encuentre despues de ^ dentro de los corchetes.

[-] Busca un rango de caracteres.

El único modo de acostumbrarse a usar las expresiones regulares es usándolas. A continuación mostramos varios ejemplos de uso:

c.ch Coincide con coche, cacho, cochera, etc.

c".pe Coincide con c.pe, c.per, etc.

sto*p Coincide con stp, stop, stoop, etc.

car.*n Coincide con cartón, carrillón, carmen, etc.

xyz.* Coincide con xyz al final de la línea.

^Los Encuentra cualquier línea que empiece con Los.

abcdef$ Encuentra cualquier línea que termine con abcdef.

^Solo$ Coincide con cualquier línea que sólo tenga la palabra "Solo".

p[aiue]so Coincide con paso, piso, puso, peso.

Ver[D-F] Coincide con VerD, VerE, VerF.

Ver[^1-9] Coincide con Ver siempre que a continuación NO haya un número.

the[ir][re] Coincide con their, therr, there, theie.

[A-Za-z][A-Za-z]* Coincide con cualquier palabra.

vi usa el modo de comandos de ex para llevar a cabo búsquedas y sustituciones. Todos los comandos que empiezan con dos puntos son comandos en modo ex.

Los comandos de búsqueda y sustitución permiten que se usen expresiones regulares sobre un rango de líneas y sustituir la tira de caracteres que se busca. El usuario puede pedir confirmación antes de que se realice la sustitución. Merece la pena hacer una revisión de la representación de los números de línea en el tutorial de ed.

:<prim>,<ult>s/<busca>/<sust>/g Comando general.

:1,$s/los/Los/g Buscar el fichero entero y sustituir los por Los.

:%s/the/The/g % siginifica el fichero entero (igual que arriba).

:.,5s/^.*//g Borra el contenido de la línea actual hasta la quinta.

:%s/los/Los/gc Sustituye "los" con "Los" preguntando antes de hacer la operación.

:%s/^....//g Borra los primeros cuatro carácteres de cada línea.

El comando de búsqueda es muy potente cuando se combina con las expresiones regulares. Si no se incluye la directiva |_g_| entonces el cambio sólo se aplica a la primera instancia que se encuentre en cada línea.

En ocasiones usted quiere usar los caracteres de búsqueda en los caracteres de sustitución. Se puede reescribir todo el comando en la línea pero vi permite que los caracteres de sustitución incluyan algunos caracteres especiales.

:1,5s/ayuda/&ndo/g Sustituye ayuda por ayudando en las cinco primeras líneas.

:%s/ */&&/g Duplica el número de espacios entre palabras.

El uso de la tira de caracteres completa_para búsqueda_tiene sus límites y por lo tanto vi usa los paréntesis en secuencia de escape ||_(_|| y ||_)_||para seleccionar el rango de la sustitución. El uso de un dígito en secuencia de escape |_1_| identifica el rango en el orden de la definición y la sustitución se puede hacer.

:s/"^"(.*"):.*/"1/g Borra todo despues de e incluyendo los dos puntos.

:s/"(.*"):"(.*")/"2:"1/g Da la vuelta a las palabras a los dos lados de los dos puntos.

vi ofrece comandos muy potentes que muchos editores de texto modernos no tienen o no pueden ofrecer. El coste de esta potencia suele ser también el principal argumento en contra de vi. Los comandos pueden ser difíciles de aprender y leer. Sin embargo, la mayoría de las cosas buenas suelen ser un poco extrañas al principio. Con un poco de práctica y tiempo, los comandos de vi se convertirán en una segunda naturaleza para Ud..