Guía avanzada del usuario

Capítulo 6 Uso del editor vi

vi (pronunciado "vi-ai," abreviatura de visual display editor) es el editor de texto estándar de SunOS. Puesto que vi no está basado en ventanas, este editor multipropósito puede utilizarse en cualquier tipo de terminal para editar un amplio rango de tipos de archivos.

Puede introducir y editar texto con vi, pero no es un procesador de textos. No se creó para procesar texto formateado como lo haría un procesador de textos comercial. Para emitir impresiones formateadas, vi necesita un programa de emulación de ajuste de escritura, como por ejemplo nroff, troff, o ditroff. Estos programas le permiten formatear texto vi insertando códigos que serán interpretados por el emulador.

vi contiene una amplia lista de comandos, muchos de los cuales tienen funciones solapadas. Al principio es muy normal que los nuevos usuarios se sientan sobrecargados por ello. El propósito de este capítulo, de cualquier forma, es ofrecer una visión de los comandos vi básicos. Al comenzar a utilizar vi, encontrará que es un editor de texto extremadamente poderoso, y que puede llevarle algún tiempo el dominarlo.

Observe que existe una versión de vi únicamente para leer llamada view. Cuando abra un archivo con view, puede utilizar comandos vi, pero no puede escribir (ni guardar) sus cambios. Esto permite que el usuario u otra persona lean el archivo vi sin modificarlo accidentalmente.

Cómo empezar vi

En las subsecciones que siguen, aprenderá a empezar vi, introducir texto en un archivo, guardar (escribir) el archivo, y salir de vi. También creará un archivo de prácticas que utilizará para el resto del capítulo.

Cómo crear un archivo

Empiece vi y edite el archivo texto como se muestra en este ejemplo:

$ vi texto

Si texto ya existe, vi lo abrirá; si es un archivo nuevo, vi lo creará. Para el propósito de este ejemplo, testo debería ser un archivo nuevo.

En un momento aparecerá la pantalla de edición de vi:

Figura 6-1 La pantalla de edición de vi

Graphic

El cursor aparecerá en la esquina superior izquierda de la pantalla. Las líneas en blanco se indican con una serie vertical de tildes (~).

Observe que también puede empezar vi sin especificar un nombre de archivo introduciendo únicamente vi. Puede nombrar el archivo más tarde, al salir de vi.

La línea de estado

La última línea de la pantalla, llamada línea de estado, muestra el nombre del archivo y el número de líneas y caracteres del mismo. Cuando cree un archivo nuevo, como ocurre en este ejemplo, la línea de estado indicará que es un nuevo archivo.

Los dos modos de vi

Hay dos modos de operar en vi:modo de entrada y modo de comando. Utilice el modo de entrada para introducir texto en un archivo, mientras que el modo de comando se utiliza para introducir comandos que llevan a cabo funciones específicas de vi específicas. El modo de comando es el modo estándar para vi.

Ya que vi no indica el modo en el que está actualmente, el distinguir entre el modo de comando y el modo de entrada es probablemente la única causa mayor de confusión de los usuarios nuevos de vi. De cualquier modo, si recuerda sólo unos pocos conceptos básicos desde el principio, será capaz de evitar todo el "estrés de vi".

Recién abierto el archivo con vi, éste estará siempre en modo de comando. Antes de que pueda introducir texto en el archivo, debe escribir uno de los comandos de entrada de vi, como por ejemplo i ("insertar"), para insertar texto en la posición actual del cursor, o bien a ("agregar"), para agregar texto después de la posición actual del cursor (estos y otros comandos de entrada de vi se explican con detalle más adelante en este capítulo).

Siempre que quiera volver al modo de comando de vi, presione Escape. Si no está seguro del modo en el que se encuentra vi, presione simplemente Escape para asegurarse de que está en modo de comando y continúe. Si presiona Escape cuando vi ya se encuentra en modo de comando, el sistema emitirá una señal acústica y la pantalla destellará sin que esto produzca daño alguno.

Modo de entrada

Para introducir texto en el archivo de ejemplo texto, introduzca el comando i "insertar" de vi. Esto hace que vi abandone el modo de comando por el modo de entrada.

Ahora introduzca unas pocas líneas breves, finalizando cada una con un Retorno. Los caracteres que introduzca aparecerán a la izquierda del cursor y desplazarán los caracteres existentes a la derecha. Por el momento, puede corregir los errores retrocediendo con tecla de retroceso y escribiendo de nuevo la línea antes de presionar Retorno. Más tarde aprenderá a editar el texto introducido.

Cuando acabe de introducir texto en texto, presione Escape para volver al modo de comando. El cursor retrocederá hasta el último carácter introducido. Ahora puede introducir más comandos vi.

Si vi parece que actúa de forma imprevisible, asegúrese de que no está en modo "Mayúsculas", lo que haría que todas sus entradas fuesen letras mayúsculas. En algunos sistemas, la tecla F1 (que normalmente está colocada al lado de la tecla Escape) actúa como Bloqueo de mayúsculas. Presionar esta tecla en vez de la tecla Escape es un error muy frecuente.


Nota -

En ocasiones necesitará pedir a vi que borre o vuelva a trazar la pantalla para eliminar, por ejemplo, mensajes ajenos del sistema. Para volver a trazar la pantalla, entre en el modo de comando y presione Ctrl-L. Esto es parecido al comando Actualizar de OpenWindows.


Modo de comando

Cuando abra un archivo con vi, estará en modo de comando. En este modo, puede introducir comandos que implementan un amplio rango de funciones. La mayoría de los comandos vi se componen de una o dos letras y un número opcional. Normalmente, hay versiones en minúsculas y en mayúsculas de los comandos que ejecutan funciones relacionadas pero distintas. Como ejemplo, al introducir a se agregará el texto a la derecha del cursor, mientras que al escribir A se añadirá el texto al final de la línea.

La mayoría de los comandos vi no precisan que se escriba Retorno para ejecutarlos. Sin embargo, los comandos que empiezan con los dos puntos (:) si que requieren que presione Retorno a continuación del comando. Algunos tratados acerca del editor vi se refieren a los comandos precedidos por los dos puntos como un tercer modo por separado de vi, el modo de última línea. Esto se debe a que cuando escribe los dos puntos mientras está en modo de comando, los dos puntos y el resto de lo escrito aparece en la parte inferior de la pantalla. De cualquier manera, en este manual, todos los comandos vi se inician desde el modo de comando.

Los comandos precedidos por dos puntos son de hecho comandos ex. vi y ex son dos interfaces separadas para el mismo programa de edición. Mientras que vi es una interfaz orientada en pantalla, ex es una interfaz orientada en línea. El conjunto completo de comandos ex está disponible desde vi. Cuando presione los dos puntos, de hecho está cambiando a la interfaz ex orientada en línea. Esto le permitirá ejecutar muchos comandos de archivo sin tener que abandonar vi. Consulte "Uso de los comandos ex "" de este capítulo, si desea más información..

Cómo finalizar una sesión

Cuando edita un archivo con vi, sus cambios no se hacen directamente en el archivo. En realidad se aplican a una copia del archivo que vi crea en un espacio de memoria temporal llamado buffer o memoria intermedia. La copia permanente en disco del archivo se modificará sólo cuando escriba (guarde) el contenido de la memoria intermedia.

Esta disposición tiene sus aspectos buenos y malos. Por un lado, significa que puede salir de un archivo y descartar todos los cambios que ha hecho durante una sesión de edición, dejando la copia en disco intacta. Por otro lado, podría perder el contenido (no guardado) de la memoria intermedia de trabajo si el sistema tiene una avería o fallo (las personas en terminales remotos conectados por líneas de teléfono son especialmente vulnerables frente a interrupciones no planificadas).

Lo más conveniente es guardar el trabajo con cierta frecuencia, especialmente cuando se hacen cambios sustanciales.


Precaución - Precaución -

GraphicAunque es posible ejecutar sesiones vi múltiples y simultáneas de un mismo archivo, no es buena idea. Puede dar lugar a confusión cuando intente averiguar qué cambios se han escrito en el archivo y cuales se han sobrescrito provenientes de otra sesión simultánea.


Cómo guardar los cambios y salir de vi

Abundan en vi comandos más o menos sinónimos que controlan la copia del contenido de la memoria intermedia en un archivo y la salida de vi. Estos comandos le ofrecen las opciones de guardar, guardar y salir, o salir sin guardar.

Cómo guardar

Guarde el contenido de la memoria intermedia (escriba la memoria intermedia en el archivo en disco) escribiendo:

:w

seguido de Retorno.

Cómo guardar y salir

Guarde y salga escribiendo:

:wq

seguido de Retorno. Otra forma de hacer esto es introduciendo ZZ.

Observe que el comando ZZ no va precedido por los dos puntos ni seguido de Retorno.

Cómo salir sin guardar

Cuando no haya hecho cambios en el archivo y simplemente quiera salir, escriba:

:q

seguido de Retorno. Si hizo cambios, vi no le permitirá salir con :q. Mostrará el mensaje No se ha escrito desde el último cambio (q! sobrescribe).

Si no quiere guardar los cambios que haya hecho, escriba:

:q!

seguido de Retorno.

Cómo imprimir un archivo

Una vez que ha salido de un archivo vi, puede imprimir el archivo con el comando siguiente:

$ lp nombre_de_archivo

donde nombre_de_archivo es el nombre del archivo vi a imprimir. Este comando imprime el archivo en su impresora predeterminada. El archivo se imprime sin ningún formato, línea tras línea, tal como aparece en la pantalla. Consulte el Capítulo 8" si desea más información acerca de los comandos de impresión.

Comandos vi básicos

Las secciones siguientes explican varias categorías de comandos vi. Estas incluyen:

Cómo desplazarse por un archivo

En las secciones previas ha aprendido a crear, guardar, imprimir, y salir de un archivo vi. Ahora que ha creado un archivo, necesitará entender los conceptos necesarios para desplazarse por él. Abra el archivo de prácticas ahora, e intente probar cada uno de los comandos discutidos en esta sección.

Cómo mover el cursor

Cuando empiece vi, el cursor estará en la esquina superior izquierda de la pantalla de vi. En modo de comando, puede mover el cursor con varios comandos de teclado. Ciertas teclas de letras, las teclas de dirección, y la tecla Retorno, la tecla de retroceso (o Eliminar), y la Barra Espaciadora pueden utilizarse para mover el cursor cuando esté en modo de comando.


Nota -

La mayoría de los comandos vi distinguen entre letras mayúsculas y minúsculas, el "mismo" comando escrito en mayúscula y en minúscula puede tener efectos radicalmente diferentes.


Cómo moverse con las teclas de dirección

Si el sistema está equipado con teclas de dirección, pruébelas ahora. Debe ser capaz de mover el cursor libremente por la pantalla utilizando combinadas las teclas de flecha arriba, abajo, derecha, e izquierda. Observe que sólo puede mover el cursor sobre el texto ya existente o sobre los espacios de entrada.

Si usa vi desde un terminal remoto, las teclas de dirección podrían no funcionar correctamente. Esto dependerá de su emulador de terminal. Si en su caso las teclas de dirección no funcionan, puede sustituirlas por las siguientes:

Cómo moverse una palabra

Presione w ("word", palabra) para mover el cursor una palabra hacia la derecha.

Presione b ("back", hacia atrás) para mover el cursor una palabra hacia la izquierda.

Presione W o B para mover el cursor después del carácter de puntuación contiguo hasta el espacio en blanco siguiente o anterior.

Presione e ("end", al final) para mover el cursor hasta el último carácter de la palabra actual.

Cómo moverse al inicio o al final de una línea

Presione ^ para mover el cursor al inicio de la línea actual.

Presione $ para mover el cursor al final de la línea actual.

Cómo moverse una línea hacia abajo

Presione la tecla Retorno para mover el cursor al principio de la línea siguiente.

Cómo moverse hacia la izquierda

Presione la tecla de retroceso para mover el cursor un carácter hacia la izquierda.

Cómo moverse hacia la derecha

Presione la Barra espaciadora para mover el cursor un carácter hacia la derecha.

Cómo moverse hasta arriba

Presione H ("high", arriba) para mover el cursor hasta la parte de arriba de la pantalla.

Cómo moverse al centro

Presione M ("middle", centro) para mover el cursor hasta el centro de la pantalla.

Cómo moverse hasta la parte inferior

Presione L ("low", inferior) para mover el cursor a la parte inferior de la pantalla.

Cómo paginar y desplazarse

Si se mueve hacia abajo cuando el cursor está en la parte inferior de la pantalla, o hacia arriba cuando el cursor está en la parte superior de la pantalla, verá el texto desplazarse hacia arriba o hacia abajo. Esta puede ser una manera efectiva de mostrar más texto en un archivo muy corto, pero puede resultar tedioso el moverse de esta manera por un archivo largo.

Puede haber observado que moviendo el cursor hacia abajo una vez que se ha alcanzado la parte inferior de la pantalla, o bien hacia arriba una vez alcanzada la parte superior de la pantalla tiene el mismo efecto que desplazar texto hacia arriba o hacia abajo. Esto funcionará en un archivo corto, pero es una manera tediosa de moverse por un archivo largo.

Puede cambiar de página o desplazarse hacia adelante o hacia atrás a través de un archivo, avanzando o retrocediendo una o media pantalla cada vez (para intentar este comando en texto, deberá agregar el texto necesario para hacer el archivo lo suficientemente grande para que el comando tenga efecto).

Observe que hay una diferencia fundamental entre cambiar de página y desplazar. Desplazar, desplaza realmente el cursor hacia arriba o hacia abajo en el texto de línea en línea, como si se desplazase sobre papel. Paginar mueve el cursor hacia arriba o hacia abajo en el texto de pantalla en pantalla. En un sistema rápido, podría no notar la diferencia. De cualquier modo, si está trabajando en un terminal remoto o en alguna otra situación en la que el sistema trabaja más lento de lo habitual, esta diferencia se convertirá lamentablemente en evidente.

Cómo paginar hacia adelante una pantalla

Para desplazarse hacia adelante (moverse hacia abajo) una pantalla completa, presione Ctrl-F (mantenga presionada la tecla Control y presione la tecla F). El cursor se moverá a la esquina superior izquierda de la pantalla nueva.

Cómo desplazarse media pantalla hacia adelante

Para desplazarse hacia adelante media pantalla, presione Ctrl-D.

Cómo paginar hacia atrás una pantalla

Para desplazarse hacia atrás (es decir, moverse hacia arriba) una pantalla completa, presione Ctrl-B.

Cómo desplazarse media pantalla hacia atrás

Para desplazarse hacia atrás media pantalla, presione Ctrl-U.

Cómo insertar texto

vi ofrece muchos comandos para insertar texto. Esta sección le presenta los más útiles. Observe que cada uno de estos comandos sitúa a vi en modo de entrada. Para utilizar cualquiera de estos comandos, primero debe estar en modo de comando. Acuérdese de presionar Escape para asegurarse de que está en modo de comando.

Cómo agregar

Escriba a (agregar) para insertar texto a la derecha del cursor. Compruébelo moviendo el cursor a cualquier parte de una línea y escribiendo a, seguido del texto que quiera agregar. Presione Escape cuando haya terminado.

Escriba A para agregar texto al final de una línea. Para ver como funciona, sitúe el cursor en cualquier parte de una línea y escriba A. El cursor se moverá al final de la línea, donde podrá escribir el texto a agregar. Presione Escape cuando lo haya hecho.

Cómo insertar

Inserte texto a la izquierda del cursor escribiendo i desde el modo de comando.

Escriba I para insertar texto al principio de una línea (el comando moverá el cursor desde cualquier posición en la línea.). De nuevo, y al igual que todos los comandos en esta sección, presione Escape para volver al modo de comando después de escribir el texto deseado.

Cómo abrir líneas

Use estos comandos para abrir líneas nuevas, bien encima o debajo de la posición del cursor actual.

Escriba o para abrir una línea debajo de la posición del cursor actual. Para probarlo, escriba o seguido de un poco de texto. Puede escribir varias líneas de texto si lo desea. Presione Escape cuando haya terminado.

Escriba O para abrir una línea encima de la posición del cursor actual.

Cómo cambiar texto

Cambiar texto lleva consigo sustituir una parte de texto por otra. vi tiene varias formas de hacerlo, dependiendo de las circunstancias.

Cómo cambiar una palabra

Para reemplazar una palabra, sitúe el cursor al principio de la palabra que va a ser reemplazada. escriba cw, seguido de la palabra nueva. Para terminar, presione Escape.

Para cambiar parte de una palabra, sitúe el cursor en la palabra, a la derecha de la parte a guardar. Escriba cw, introduzca la correción, y presione Escape.

Cómo cambiar una línea

Para reemplazar una línea, sitúe el cursor en cualquier lugar de la línea y escriba cc. La línea desaparecerá, dejando una línea en blanco para el texto nuevo (que puede ser de cualquier longitud). Presione Escape para terminar.

Cómo cambiar parte de una línea

Para reemplazar parte de una línea, sitúe el cursor a la derecha de la parte a guardar. escriba C, introduzca la correción, y presione Escape. Esto cambiará la parte de la línea desde la posición actual del cursor hasta el final de la línea.

Cómo sustituir uno o varios caracteres

Para sustituir uno o más caracteres a partir del carácter bajo el cursor, escriba s, seguido por el texto nuevo. Presione Escape para volver al modo de comando.

Cómo reemplazar un carácter

Use este comando que sirve para reemplazar el carácter resaltado por el cursor por otro carácter. Sitúe el cursor sobre el carácter y escriba r, seguido de un único carácter de reemplazo. Después de la sustitución, vi volverá automáticamente al modo de comando (no es necesario presionar Escape).

Cómo transponer caracteres

Para corregir los caracteres transpuestos en vi sólo se necesita escribir dos veces. Suponga que escribió "lso" cuando lo que quería era "los". Haga la correspondiente corrección colocando el cursor sobre la primera letra que se quiere mover (en este caso, e), y escribiendo a continuación xp. La e y la h intercambiarán sus lugares - y vi volverá automáticamente al modo de comando.

Cómo partir o unir líneas

Para partir una línea sin que afecte al texto, mueva el cursor al espacio donde quiera partir la línea y escriba r (para "reemplazar") seguido de Retorno. Observe que si escribe r con el cursor sobre un carácter y a continuación presiona Retorno, ese carácter se reemplazará por Retorno.

Para unir dos líneas, sitúe el cursor en la línea superior y escriba una J mayúscula (no es necesario presionar Escape después de escribir J).

Cómo deshacer los cambios

Cuando edite texto y haga cambios en un archivo vi, podría ocurrir que en algún momento desease no haber hecho un cambio en el texto. Los comandos undo (deshacer) de vi le permitirán anular los efectos de una operación y continuar la edición desde el momento anterior.

Cómo deshacer los comandos anteriores

Si se equivocó en vi o si cambió de idea una vez que una operación se completó, puede deshacer el último comando presionando u inmediatamente después del comando (no es necesario presionar Escape después de escribir u). Si presiona u por segunda vez deshace la operación de deshacer.

Cómo deshacer cambios en una línea

Escriba U para deshacer todos los cambios que hizo en una línea. Este comando funcionará únicamente antes de mover el cursor a otra línea (no es necesario presionar Escape después de escribir U)).

Cómo eliminar texto

Estos comandos vi eliminan el carácter, la palabra o la línea que se indique. vi seguirá en modo de comando, por lo que cualquier inserción posterior de texto deberá ir precedida por algún comando que pase a modo de entrada.

Cómo eliminar un carácter

Para eliminar un carácter, sitúe el cursor sobre el carácter a borrar y escriba x.

El comando x también elimina el espacio que ocupaba el carácter -cuando en la mitad de una palabra se elimina una letra, las letras restantes se cerrarán, sin dejar un hueco. También puede eliminar los espacios en blanco de una línea con el comando x.

Para eliminar el carácter anterior al cursor (a su izquierda), escriba X (en mayúsculas).

Cómo eliminar una palabra o parte de una palabra

Para eliminar una palabra, sitúe el cursor al principio de la palabra y escriba dw. Se eliminarán la palabra y el espacio que ocupaba.

Para eliminar parte de una palabra, sitúe el cursor en la palabra a la derecha de la parte a guardar. escriba dw para eliminar el resto de la palabra.

Cómo eliminar una línea

Para eliminar una línea, sitúe el cursor en cualquier lugar de la línea y escriba dd. Se eliminarán la línea y el espacio que ocupaba.

Cómo eliminar parte de una línea

También puede eliminar parte de una línea.

Para eliminar todo lo que se encuentre a la derecha del cursor, sitúelo a la derecha de la parte de la línea que desee guardar, y escriba D.

Para eliminar todo lo que se encuentra a la izquierda del cursor, sitúelo a la derecha de la parte de la línea que quiera eliminar e introduzca d0 (d-cero).

Cómo eliminar hasta el final del archivo

Para eliminar todo el texto comprendido entre la línea actual y el final del archivo, escriba dG. También se eliminará la línea donde estaba el cursor.

Cómo eliminar desde el principio del archivo

Para eliminar todo el texto desde el principio del archivo hasta la línea actual, escriba d1G. También se eliminará la línea donde estaba el cursor.

Cómo copiar y mover texto -Tirar, eliminar y poner

Muchos procesadores de textos le permiten "copiar y pegar" y "cortar y pegar" líneas de texto. El editor vi también incluye estas características. El modo de comando de vi equivalente a "copiar y pegar" es tirar y poner; el equivalente a "cortar y pegar" es eliminar y poner.

Los métodos para copiar y mover pequeños bloques de texto en vi lleva consigo la utilización combinada de los comandos yank, delete y put.

Cómo copiar líneas

Para copiar una línea se necesitan dos comandos: yy o Y ("tirar") y p ("poner abajo") o P ("poner arriba"). Observe que Y hace lo mismo que yy.

Para tirar una línea, sitúe el cursor en cualquier lugar de la línea y escriba yy. Ahora mueva el cursor a la línea de arriba donde quiere colocar la línea tirada (copiada), y escriba p. Una copia de la línea tirada aparecerá en la línea nueva debajo del cursor.

Para situar la línea tirada en una línea nueva encima del cursor, escriba P.

El comando yy trabaja bien con un contador: para tirar 11 líneas, por ejemplo, basta con escribir 11yy. Once líneas, contando hacia abajo desde el cursor, se tirarán, y vi indica esto con un mensaje en la parte inferior de la pantalla: 11 lines yanked..

Puede utilizar también los comandos P o p inmediatamente después de cualquiera de los comandos de eliminación explicados anteriormente. Esto pone el texto que eliminó por encima o por debajo del cursor, respectivamente.


Precaución - Precaución -

GraphicUtilice únicamente los comandos de movimiento del cursor entre las operaciones de tirar o eliminar y poner. Si elimina o tira cualquier otro texto antes de poner el texto nuevo en su lugar, las líneas que tiró o eliminó se habrán perdido.


Cómo mover líneas

Mover líneas requiere también dos comandos: dd ("borrar") y p o bien P.

Para mover una línea, sitúe el cursor en cualquier lugar de la línea y escriba dd. Por ejemplo, para eliminar 5 líneas, escriba 5dd.

A continuación, mueva el cursor a la línea por encima donde quiere reinsertar la línea eliminada y escriba p. Esto inserta el texto en una línea nueva debajo del cursor.

Por otro lado, puede poner la línea eliminada por encima del cursor escribiendo P.

Uso de memorias intermedias con nombre

Para insertar repetidamente un grupo de líneas en varios lugares del documento, puede tirar (o eliminar) las líneas en una memoria intermedia con nombre. Puede especificar memoria intermedia con nombre haciendo preceder un comando de dobles comillas (") y un nombre para la memoria intermedia. Por ejemplo, para tirar cuatro líneas sobre la memoria intermedia de nombre a, escriba "a4yy. Puede utilizar varias memorias intermedias. Por ejemplo, podría eliminar texto a partir de una posición y agregarlo a otras varias. Para eliminar 12 líneas de la memoria intermedia de nombre b, escriba "b12dd.

Para insertar el texto, escriba el comando p o P con "n, donde n es la memoria intermedia con nombre. Por ejemplo, para insertar las líneas guardadas en la memoria intermedia b, introduzca "bP.

Puede sobrescribir memorias intermedias con nombre con líneas nuevas. Las memorias intermedias se guardan hasta que salga de vi.

Cuando use memorias intermedias con nombre, puede borrar y tirar otro texto con la seguridad de no afectar a las líneas que ya ha guardado en las memorias intermedias con nombre -a no ser, por supuesto, que sobrescriba intencionadamente esta memoria intermedia con nombre.

Uso de un contador para repetir comandos

Muchos comandos vi pueden ir precedidos por un factor de repetición (llamado contador) -un número que precede el comando y le indica cuantas veces debe repetir la operación.

La mayoría de los comandos de las secciones anteriores llevan contadores. Por ejemplo, 3dd repite el comando para eliminar una línea tres veces, por tanto elimina tres líneas. 2dw elimina dos palabras, y 4x elimina cuatro caracteres o espacios. También puede utilizar contadores junto con comandos para mover el cursor, como 3w y 2Ctrl-F. Esto se hará evidente a medida que aprenda los comandos de vi. En la sección, "Resumen de los comandos básicos de vi"" al final de este capítulo, cada comando que puede llevar un contador está indicado por "[count]" antes del nombre del comando.

Si escribe un punto (.) se repetirá el comando previo de cambio de texto. Por ejemplo, si únicamente ha eliminado una línea con dd, puede mover el cursor a otra línea y eliminarla escribiendo sólo un punto

Uso de los comandos ex

Los comandos de ex son más precisos y convenientes que tirar, borrar, y poner cuando esté trabajando con bloques grandes de texto. En vez de contar líneas en la pantalla y después buscar un punto de inserción, dará a vi un rango de líneas a mover o copiar y después especificar la línea antes del punto de inserción (por supuesto, con un comando de eliminación no es necesario un punto de inserción).

Cómo activar y desactivar la numeración de las líneas

Para activar la numeración de las líneas, escriba :set nu y presione Retorno.

Los números de las líneas aparecerán en el margen izquierdo. Observe que estos números no aparecerán si imprime el archivo. Sólo son visibles en pantalla.

1 El deseo de escribir con mayor rapidez,
2 y la necesidad de encerrar en poco
3 muchas noticias, fueron causa de
4 abreviar ciertos vocablos que
5 pudieran adivinarse fácilmente.
6
7
8
~
~
~
~
~
~
:set nu

Para desactivar la numeración de las líneas, escriba :set nonu y presione Retorno.

Cómo copiar líneas

El formato básico del comando copiar en ex es:

:line#,line# co line#

Los primeros dos números (separados por una coma) especifican el rango de líneas a copiar. El tercer número es la línea antes del punto de inserción.

Por ejemplo, para copiar las líneas de la 1 a la 5 de texto y situar la copia después de la línea 12, debe escribir lo siguiente:

:1,5 co 12

y presionar Retorno.

Para especificar rangos de líneas puede utilizar estas abreviaturas:

Por tanto, para copiar el rango "desde la línea actual hasta la línea 5" e insertar este texto a partir de la línea 12, debe escribir:

:1,5 co 12

Para copiar el rango "desde la línea 6 hasta el final del archivo" e insertar este bloque después de la línea 2, debe escribir:

:6,$ co 2

Cómo mover líneas

El formato básico del comando de mover en ex es parecido al comando de copiar explicado anteriormente:

:line#,line# m line#

Los rangos de líneas y los puntos de inserción se especifican de igual forma, incluyendo el uso de las abreviaturas . y $. La diferencia en el funcionamiento es simplemente que "move" elimina un bloque de una posición y lo coloca en otra.

Por ejemplo, para mover las líneas de la 1 hasta la 5 a la línea siguiente a la 12, debe escribir:

:1,5 m 12

y presione Retorno.

Cómo eliminar líneas

Para eliminar un rango de líneas, use este formato del comando:

:line#,line# d

Por ejemplo, para eliminar las líneas de la 1 a la 5, debe introducir:

:1,5 d

Cómo buscar y reemplazar con vi

vi ofrece distintas formas de situarse en un archivo localizando una cadena de caracteres. También dispone de una potente función de reemplazo general.

Cómo buscar una cadena de caracteres

Una cadena de caracteres consiste simplemente en una serie de caracteres puestos en fila. Puede contener letras, números, signos de puntuación, caracteres en pantalla, espacios en blanco, tabulaciones, o retornos de carro. Una cadena puede ser una palabra gramatical o cualquier parte de una palabra.

Para encontrar una cadena de caracteres, escriba / seguido de la cadena que quiera buscar, y a continuación presione Retorno. vi sitúa el cursor en la siguiente aparición de la cadena. Por ejemplo, para encontrar la cadena "meta", escriba /meta y a continuación Retorno.

Introduzca n para ir a la siguiente aparición de la cadena; escriba N para ir a la aparición previa.

Para buscar hacia atrás en el archivo, puede utilizar ? en vez de /. En este caso, el sentido de la dirección en n y N está cambiado.

La operación de buscar normalmente distingue entre mayúsculas y minúsculas: si busca "china" no encontrará "China". Si quiere que vi no distinga entre mayúsculas y minúsculas al buscar, escriba :set ic. Para volver al modo por omisión, que tiene en cuenta las mayúsculas y minúsculas, escriba :set noic.

Si vi encuentra la cadena solicitada, el cursor se parará en su primera aparición. Si no encuentra la cadena, vi mostrará el mensaje Muestra no encontrada en la última línea de la pantalla.

Ciertos caracteres especiales ( / & ! . ^ * $ \ ?) tienen un significado especial en el proceso de búsqueda y deben ir precedidos de una barra inversa cuando se utilizan en una búsqueda. Para "escapar" un carácter especial, hágalo preceder de una barra inversa (\). Por ejemplo, para buscar la cadena "cómo?" escriba /cómo\? y presione Retorno.

Estos caracteres especiales pueden utilizarse como comandos de la función de búsqueda, por lo que si quiere buscar una cadena que incluye uno o más de estos caracteres, debe indicarlo precediendo el carácter con una barra inversa. Para escapar de la propia barra inversa, escriba \\.

Búsqueda más exacta

Puede hacer la búsqueda más precisas marcando la cadena con indicadores para las siguientes características:

Para que coincida con el principio de línea, comience la cadena de caracteres con el símbolo (^). Por ejemplo, para encontrar la siguiente línea que empiece con "Buscar", escriba:

/^Buscar

Para que coincida con el final de línea, termine la cadena de caracteres con un signo dólar ($). Por ejemplo, para encontrar la siguiente línea que termine con "buscar.", escriba:

/buscar\.$

(Observe que el punto va precedido por una barra inversa).

Para que coincida con el principio de palabra, escriba \< al principio de la cadena de caracteres, para que coincida con el final de palabra, escriba \> al final de la cadena de caracteres. Así, para que concuerde exactamente una palabra y no una cadena, combine las marcas de principio de palabra y de final de palabra en el patrón de búsqueda. Por ejemplo, para encontrar la siguiente aparición de la palabra -en oposición a la cadena -"buscar", escriba:

/\<search\>

Para indicar un carácter cualquiera, escriba un punto (.) en la cadena en la posición donde coincide. Por ejemplo, para encontrar la siguiente aparición de "informe" o "informa", escriba:

/inform.

Debido a que con esto se busca una cadena y no una palabra, este modelo de búsqueda podría encontrar construcciones como "información" e "informal".

Para buscar caracteres alternativos en una cadena, escriba las alternativas entre corchetes. El modelo de búsqueda /[md]cadena encontrará las cadenas que empiecen por m o d. Por otra parte, /[d-m]cadena encontrará las cadenas que empiecen por cualquier letra entre la d y la m.

Para coincidir con cero o más apariciones del último carácter, escriba un símbolo asterisco (*) en la cadena. Puede combinar para más efectividad los corchetes junto con el asterisco para buscar alternativas muy concretas. Por ejemplo, para buscar todas las cadenas que terminen con cualquier letra desde la a hasta la z y que empiecen en "inform" y además encontrar las apariciones de "inform", escriba:

/inform[a-z]*

Cómo reemplazar una cadena de caracteres

El procedimiento para reemplazar una cadena de texto está basado en los procedimientos de búsqueda explicados anteriormente. Todos los caracteres especiales para las comparaciones en las búsquedas pueden utilizarse en la operación de buscar y reemplazar.

El formato básico del comando es:

:g/search-string/s//replace-string/g

seguido de la tecla Retorno.

Por tanto, para reemplazar cualquier aparición de la cadena de caracteres "informe" con "documento", debe escribir:

:g/informe/s//documento/g

y pulsar Retorno.

Puede modificar este comando para detener la búsqueda y hacer que vi le pregunte cada vez si desea reemplazar o no. El comando siguiente utiliza gc (agregando c de "consultar") para hacer que vi se detenga en cada aparición de "informe" y le pregunte si desea sustituir la cadena. Responda y para sí o n para no.

:g/disinformation/s//newspeak/gc


Nota -

Puede cancelar una búsqueda y reemplazamiento "consultada" presionando Ctrl-C.


Cómo ir a una línea específica

Para ir a la última línea de un archivo abierto, escriba G. y para volver a la primera línea del archivo, escriba 1G.

Puede ir a cualquier otra línea escribiendo su número seguido de G.

Por ejemplo, suponga que sale del archivo texto mientras editaba la línea 51. Puede acceder a esa línea abriendo el archivo y escribiendo 51G.

Cómo insertar un archivo en otro

Con vi es muy cómodo el "leer" (insertar) un archivo en el archivo que está editando. El formato general del comando es:

:line# r nombre_de_archivo

Si no especifica un número de línea, vi inserta el archivo en la posición actual del cursor.

Por ejemplo, si quiere insertar el archivo cervantes en la línea 84 del archivo texto, debe escribir:

:84 r cervantes

O puede situar el cursor en la línea 84 y escribir:

:r cervantes

Cómo editar archivos múltiples

vi le permite editar archivos múltiples. Por ejemplo, para editar el archivo cervantes mientras edita texto:

  1. Primero, guarde su trabajo actual en texto. Escriba :w y presione Retorno.

  2. Para editar cervantes, escriba:n cervantes y presione Retorno.

  3. Haga cambios de edición en cervantes y guarde su trabajo.

  4. Cuando haya terminado de trabajar con cervantes y haya guardado su trabajo, tiene tres opciones:

    • Salir de vi. Escriba :q y presione Retorno.

    • Volver a texto. Escriba :n # y presione Retorno.

    • Cambie de uno a otro archivo con el comando:n #.

Cómo editar una serie de archivos

Para editar una serie de archivos, liste los nombres de los archivos a continuación del comando vi cuando arranque vi en el indicador de comando:

$ vi texto cervantes

Los archivos aparecerán en el orden en el que se listaron. Primero aparecerá texto. Cuando haya terminado de editar texto, escriba :n para ir al siguiente archivo, cervantes. Para ir al siguiente archivo sin guardar los cambios hechos en el archivo actual, escriba :n! en vez de :n.

Si tiene una serie de archivos con nombres relacionados (por ejemplo, test1, test2, test3), puede utilizar caracteres comodines para especificar un grupo de archivos:

$ vi test*

Los archivos irán apareciendo para la edición en orden alfabético.

Cómo copiar líneas entre archivos

Para copiar líneas de un archivo a otro, haga lo siguiente:

  1. Edite el primer archivo.

  2. Guarde las líneas deseadas en memorias intermedias con nombre, utilizando el comando yank. Por ejemplo, para guardar 10 líneas en la memoria intermedia a, escriba a10Y.

  3. Sin salir de vi, edite el siguiente archivo (cervantes en este ejemplo):

    :n cervantes
    

  4. Agregue las líneas del primer archivo con el comando put. Por ejemplo, para poner los contenidos de la memoria intermedia a debajo de la posición actual del cursor, escriba ap.

    Recuerde que los contenidos de todas las memorias intermedias con nombre se pierden cuando sale de vi. No utilice el comando de salir (:q) hasta que haya terminado cualquier operación que necesite las memorias intermedias con nombre y su contenido.

Cómo establecer parámetros vi

vi tiene muchas variables que afectan a su comportamiento y a su aspecto. Puede ver una lista de estas variables (junto con su configuración actual) mientras procesa vi. Para ello escriba:

:set all

seguido de Retorno.

Recuperación tras una caída del sistema

Si el sistema cae, el contenido de la memoria intermedia está en peligro. Sin embargo a menudo es posible recuperar la mayoría del trabajo al reiniciar de nuevo vi con el formato del comando:

vi -r nombre_de_archivo

donde nombre_de_archivo es el archivo que estaba editando cuando ocurrió la caída. Normalmente el sistema le enviará un aviso por correo después de que haya acabado la reinicialización, avisándole de que hay un archivo de recuperación.

Resumen de los comandos básicos de vi

En la tabla siguiente puede consultar de forma cómoda los comandos básicos de vi:

Tabla 6-1 Comandos básicos de vi

Comando 

Significado 

Empezar vi

 

vi nombre_de_archivo

Abrir o crear el archivo 

vi

Abrir un archivo nuevo para nombrarlo más tarde 

vi -r nombre_de_archivo

Recuperar un archivo de una caída del sistema 

view nombre_de_archivo

Abrir archivo sólo para leer 

Comandos del cursor 

 

h

Moverse un carácter hacia la izquierda 

Moverse una línea hacia abajo 

Moverse una línea hacia arriba 

Moverse un carácter a la derecha 

Moverse una palabra a la derecha 

Moverse una palabra a la derecha (pasados los signos de puntuación) 

Moverse una palabra a la izquierda 

Moverse una palabra a la izquierda (pasados los signos de puntuación) 

Moverse al final de la palabra actual 

Return 

Moverse una línea hacia abajo 

Back Space 

Moverse un carácter a la izquierda 

Space Bar 

Moverse un carácter a la derecha 

H

Moverse a la parte de arriba de la pantalla 

M

Moverse al centro de la pantalla 

L

Moverse a la parte inferior de la pantalla 

Ctrl-F 

Paginar una pantalla hacia adelante 

Ctrl-D 

Desplazarse media pantalla hacia adelante 

Ctrl-B 

Paginar una pantalla hacia atrás 

Ctrl-U 

Desplazarse media pantalla hacia atrás 

Insertar caracteres y líneas 

 

a

Insertar caracteres a la derecha del cursor 

A

Insertar caracteres al final de la línea 

i

Insertar caracteres a la izquierda del cursor 

I

Insertar caracteres al principio de línea 

o

Insertar una línea por debajo el cursor 

O

Insertar una línea por encima del cursor 

Cambiar texto 

 

cw

Cambiar una palabra (o parte de una palabra) a la derecha del cursor 

c

Cambiar una línea 

C

Cambiar desde el cursor hasta el final de la línea 

s

Sustituir cadena por carácter(es) desde el cursor hacia adelante 

r

Reemplazar el carácter marcado por cursor por otro carácter 

r Return

Partir una línea 

J

Unir la línea actual con la línea inferior 

xp

Transponer el carácter del cursor con el carácter a la derecha 

~

Cambiar el tipo de letra (mayúscula o minúscula)

u

Deshacer el comando anterior 

U

Deshacer todos los cambios en la línea actual 

:u

Deshacer el comando anterior sobre la línea última 

Eliminar texto 

 

x

Eliminar el carácter del cursor 

X

Eliminar el carácter a la izquierda del cursor 

dw

Eliminar la palabra (o la parte de la palabra a la derecha del cursor) 

dd

Eliminar la línea que contiene al cursor 

D

Eliminar la parte de la línea a la derecha del cursor 

dG

Eliminar hasta el final de línea 

d1G

Eliminar desde el principio del archivo hasta el cursor 

:5,10 d

Eliminar las líneas de la 5 a la 10 

Copiar y mover texto 

 

yy

Tirar o copiar línea 

Y

Tirar o copiar línea 

p

Poner la línea tirada o eliminada por debajo de la línea actual 

P

Poner la línea tirada o eliminada por encima de la línea actual 

:1,2 co 3

Copiar las líneas de la 1 a la 2 y ponerlas después de la línea 3 

:4,5 m 6

Mover las líneas de la 4 a la 5 y ponerlas después de la línea 6 

Ajustar la numeración de las líneas 

 

:set nu

Mostrar los números de las líneas 

:set nonu

Esconder los números de las líneas 

 

Establecer la distinción entre mayúsculas y minúsculas 

:set ic

En la búsqueda se ignora la distinción entre mayúsculas y minúsculas 

:set noic

En la búsqueda se distingue entre mayúsculas y minúsculas 

Encontrar una línea 

 

G

Ir a la última línea del archivo 

1G

Ir a la primera línea del archivo 

21G

Ir a la línea 21 

Buscar y reemplazar 

 

/string

Búsqueda de cadena de caracteres

?string

Búsqueda hacia atrás de cadena de caracteres

n

Encontrar la siguiente aparición de string en la dirección de búsqueda

N

Encontrar la aparición previa de la cadena de caracteres en la dirección de búsqueda

:g/search/s//replace/g

Buscar y reemplazar 

Limpiar la pantalla

 

Ctrl-L 

Limpiar (actualizar) la pantalla 

 

Insertar un archivo en otro archivo 

:r nombre_de_archivo

Insertar (leer) el archivo a continuación del cursor 

:34 r nombre_de_archivo

Insertar el archivo después de la línea 34 

Guardar y salir 

 

:w

Guardar los cambios (escribir el contenido de la memoria intermedia) 

:w nombre_de_archivo

Escribir el contenido de la memoria intermedia a un archivo con nombre 

:wq

Guardar los cambios y salir de vi 

ZZ

Guardar los cambios y salir de vi 

:q!

Salir sin guardar los cambios