Introducción a vi - Tutorial avanzado de Vi

6 - Tutorial avanzado de Vi

[editar]
Monografía creado por Mononeurona. Extraido de: http://www.mononeurona.org/index.php?idp=180
26 de Octubre de 2005
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.

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?

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.

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).

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..
[editar]

Sé el primero en opinar


Monografías relacionados con 'Introducción a vi'

Este editor fue escrito originalmente en la Universidad de California en Berkeley y se puede... Más »
Este texto pretende ser una introducción al desafío que nos hemos auto-comprometido. Un desafío que... Más »
En el presente trabajo voy a considerar la Historia del Capitán cautivo, inserta en los... Más »
El desarrollo de la ciencia y la meta ciencia de las diferentes disciplinas del conocimiento... Más »
Keith Whinnom1 nos enseñó a leer la poesía de cancionero con ojos bien distintos a... Más »

Autor y licencia de 'Introducción a vi'


Monografía de Mononeurona. Extraido de: http://www.mononeurona.org/index.php?idp=180 CopyLeft
Este trabajo está licenciado bajo la Creative Commons License. 1999-2005 © :: MonoNeurona.org ::
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.