Logo Studenta

INTRODUCCIÓN AL USO Y ADMINISTRACIÓN DEL SISTEMA OPERATIVO LINUX EDITOR DE TEXTOS VI

¡Este material tiene más páginas!

Vista previa del material en texto

INICIACIÓN AL USO Y ADMINISTRACIÓN DEL S O LINUX UNIDAD 3. EL EDITOR DE TEXTOS vi 
________________________________________________________________________________________________________________________ 
_ 
 
 INICIACIÓN AL USO Y ADMINISTRACIÓN DEL S O LINUX UNIDAD 3. EL EDITOR DE TEXTOS vi 
________________________________________________________________________________________________________________________ 
_ 
 
Introducción al uso y administración del sistema operativo Linux. Editor de textos vi
Introducción. ¿Qué es vi? 
 	 
 En cualquier sistema operativo existe siempre un editor de texto sin formato para crear o modificar archivos de configuración, programas fuente o programas interpretados. Unix tiene más de uno pero el más popular, ya que se ha convertido en un estándar que no falta en ninguna distribución de Linux, o de Unix, es el vi. Se puede encontrar en /usr/bin/vi como un archivo binario. Su nombre proviene de "visual" y su predecesor es ed un antiguo editor de líneas al estilo del edlin del DOS. Actualmente vi está reemplazado por /usr/bin/vim, de vi mejorado, pero se mantiene su nombre original mediante un enlace simbólico que apunta a vi. Otro enlace que apunta también al vi es el /usr/bin/view. Por tanto, si tecleamos vi, vim o view estamos abriendo el mismo editor. Sus archivos de configuración se encuentran en /usr/share/vim y la versión actualmente en uso es la 6.0.165. Todo esto último sí que depende de la distribución que se use. 
 
 Un archivo de texto sin formato, también llamado de texto llano o de texto ascii, es aquel que no contiene mas que los caracteres mínimos necesarios y suficientes para imprimir un texto en pantalla o en impresora. Por ejemplo, si escribimos la frase "hoy es lunes", sin las comillas dobles y sin pulsar INTRO, y la guardamos como un archivo de texto de nombre diasemana, observaremos que este archivo contiene exactamente 12 bytes. Lo podemos comprobar haciendo: 
 	$ echo -n "hoy es lunes" > diasemana 
 $ cat diasemana (con este comando se ven todos los bytes) 
 $ ls -l diasemana (-rw-r--r-- 1 root root 12 Mar 7 19:45 diasemana) 
 
 Si mediante un procesador de texto, como el empleado para escribir estas líneas, abrimos el archivo anterior y resaltamos en negrita la palabra "hoy", en cursiva la palabra "es" y en subrayado la palabra "lunes" para que aparezca como "hoy es lunes" y después lo guardamos en disco, veremos que su tamaño es de: 
 
 $ ls -l diasemanaf.sxw ( -rw-r--r--1 root root 4902 Mar 7 19:57diasemanaf.sxw) 
 	 
 No debe sorprendernos el hecho de que aparezcan 4902 bytes en un archivo que en origen tenía sólo 12 bytes. El aumento se debe a los caracteres añadidos por el procesador de texto para dar tamaño y apariencia personalizada a los diferentes caracteres, en definitiva dar formato al texto. Queda aclarada, pues, la diferencia entre texto llano y texto con formato (y entre editor y procesador). 
 
 Con vi podemos crear, visualizar y modificar archivos de texto, disponiendo para ello de gran cantidad de herramientas que nos permiten hacer cualquier cosa que no sea dar formato al texto o manejar e incluir imágenes o gráficos. Esto no es ninguna merma porque no se necesitan gráficos en los archivos de configuración ni en los programas fuente ni en los scripts de Linux. Además, en el mundo de Unix, los trabajos de edición de texto y de formato del mismo se realizan por separado, es decir, utilizando programas diferentes. De hecho con vi se han escrito libros enteros e incluso páginas de internet. Para trabajar con archivos binarios, debemos usar otro editor, por ejemplo hexedit, libremente incluído en las distribuciones de Linux. 
 Mientras estamos trabajando con el editor vi podemos encontrarnos en uno de los tres modos o estados siguientes: modo orden, modo texto y modo última línea, llamado también modo dos puntos porque todas las órdenes, en este modo, van precedidas por :. 
 
NOTA: Es conveniente abstenerse de teclear vi en la línea de comandos hasta que no se hayan estudiado los comandos básicos para salir del editor. Estos comandos se describirán en los próximos apartados. 
 
 
1. El modo orden de vi. 
 
 Tan pronto arranca vi, entra en el modo orden de funcionamiento. En este modo, cualquier carácter tecleado será interpretado como una orden para el editor y no como un texto que se desea incluir en el archivo. Incluso, muchos de los caracteres-órdenes, ni se imprimirán en la pantalla . 
 En este modo de funcionamiento se puede visualizar el contenido de un archivo línea a línea, de pantalla en pantalla, de media pantalla en media pantalla, y en todos los casos anteriores, se puede progresar hacia delante (hacia el fin del archivo) o hacia atrás (hacia el comienzo del mismo). 
 	También se puede modificar el contenido del archivo en este modo. Permite suprimir, copiar, cortar y pegar los caracteres, palabras, líneas, incluso bloques de texto, antes seleccionados. 
 	 
 Otra opción muy interesante es la orden u, (de undo, deshacer) que permite deshacer las operaciones realizadas anteriormente. Este comando resulta muy útil para practicar durante el aprendizaje de vi, pues, con un mismo archivo patrón se pueden probar todos los comandos y dejarlo después como estaba en origen para poder así seguir experimentando con él. 
 
 
1.1. Órdenes para desplazar el texto en la pantalla. 
 	 
 Con el fin de disponer de algún archivo para practicar, se puede preparar uno mediante la redirección simple del listado de todos los archivos de un subdirectorio, por ejemplo el /dev, hacia otro archivo que llamaremos texto.uno. Lo podemos crear tecleando lo siguiente: 
 
 	$ ls -C /dev > texto.uno 
 
 	A continuación, para abrirlo con el vi, teclaremos en línea de comandos simplemente: 
 
 $ vi texto.uno (Nos aparecerá en pantalla el contenido del archivo) 	A partir de este momento podemos probar los comandos siguientes: 
 	 
	 
	 Control+f 
	--> 
	avanza una pantalla. 
	 
 
	[n] Control+f 
	--> 
	avanza n pantallas. 
	 
	 Control+b 
	--> 
	retrocede una pantalla. 
	 
	[n] Control+b 
	--> 
	retrocede n pantallas. 
	 
	 
	
	
	 
	 Control+d 
	--> 
	avanza media pantalla. 
	 
 
	[n] Control+d 
	--> 
	avanza n líneas. 
	 
	 Control+u 
	--> 
	retrocede media pantalla. 
	 
	[n] Control+u 
	--> 
	retrocede n líneas. 
	 
	 
	
	
	NOTA: 
	 Control+l 
	--> 
	limpia la pantalla de caracteres ajenos. 
 
 
1.2. Órdenes para mover el cursor a través del texto. 
 	 
 Después de localizar una pantalla, o media pantalla de texto, dentro de un archivo, suele ser necesario fijar la posición del cursor en una línea, en una palabra o en un carácter determinado. Con este fin existe el conjunto de comandos que veremos a continuación. Para poder practicarlos, utilizaremos el archivo, ya creado en el apartado anterior, texto.uno. Para abrirlo teclearemos, de nuevo, $ vi texto.uno . 
 
	 
	 l 
	--> 
	mueve el cursor un espacio a la derecha 
	 
	[n] l 
	--> 
	mueve el cursor n espacios a la derecha 
	 
	 h 
	--> 
	cursor un espacio a la izquierda 
	 
	[n] h 
	--> 
	cursor n espacios a la izquierda 
	 
	 k 
	--> 
	coloca el cursor una línea más arriba 
	 
	[n] k 
	--> 
	cursor n líneas hacia arriba 
	 
	 j 
	--> 
	coloca el cursor una línea más abajo 
	 
	[n] j 
	--> cursor n líneas hacia abajo 
 
 Observar que la posición de las cuatro teclas h j k l coincide, respectivamente, con los cuatro dedos, índice a meñique, de la mano derecha. Con las teclas h y l no se puede salir de la línea actual. Se entiende por línea actual, aquella línea sobre la que se encuentra el cursor en cualesquiera de sus palabras o espacios. Con las teclas j y k se puede barrer todas laslíneas del archivo y si intentamos ir más allá de la primera, o de la última, vi lanza un aviso acústico (haciendo sonar el beep) u óptico (invirtiendo el color del texto por el de fondo). 
 
	 
	 e 
	--> 
	(end) cursor al fin de la palabra actual o siguiente 
	
	[n] e 
	--> 
	cursor al fin de las n palabras siguientes 
	 
	 w 
	--> 
	(word) cursor al principio de la palabra actual o siguiente 
	 
	[n] w 
	--> 
	cursor al principio de las n palabras siguientes 
	 
	 b 
	--> 
	(back) cursor al principio de la palabra actual o anterior 
	 
	[n] b 
	--> 
	cursor al principio de las n palabras anteriores 
	 
	 | 
	--> 
	coloca el cursor en la columna 1(de caracteres) 
	 
	[n] | 
	--> 
	cursor a la columna n de caracteres 
 Por cierto, las tres letras e w b nos recuerdan las siglas de un popular simulador de circuitos. Por otro lado, en el uso de las órdenes e w y b, el único límite es no salirse del texto. Para la | el límite es el número de caracteres por línea. Palabra actual es aquella palabra sobre la que se coloca el cursor en cualesquiera de sus caracteres. Dos palabras están separadas por un espacio (decimal 32) o por un cambio de línea (decimal 10). 
 
	 
	 0 
	--> 
	cursor al principio de la línea actual 
	 
	 $ 
	--> 
	cursor al fin de la línea actual 
	 
	 G 
	--> 
	(go) primer carácter de la última línea del archivo. 
	 
	[n] G 
	--> 
	primer carácter de la línea n del archivo 
 
 Con las órdenes 0 y $, el cursor, no sale de la línea actual. Observar, también, que la orden G utiliza, la mayúscula. Como ejemplo, 1G coloca el cursor sobre la primera línea del archivo. Si en total existen en el archivo 50 líneas, para ir a la última podemos elegir entre teclear 50G o bien G. La segunda, además de ser más breve, es más útil cuando desconocemos el tamaño real del archivo. 
 
	 
	[n] ( 
	--> 
	inicio de la frase anterior, o de n frases anteriores 
	 
	[n] ) 
	--> 
	inicio de la frase siguiente, o de n frases siguientes 
	 
	[n] { 
	--> 
	inicio del párrafo anterior, o de n párrafos anteriores 
	 
	[n] } 
	--> 
	inicio del párrafo siguiente, o de n párrafos siguientes 
 
 Para las cuatro órdenes n es un número opcional. Por defecto contabiliza una frase o un párrafo según proceda. La frase termina con un punto y espacio o con un punto y nueva línea. El párrafo termina con, al menos, una línea en blanco. 
 
 	 
1.3. Creación de un archivo de texto. 
 	 
 Abrimos un pequeño paréntesis en el estudio del modo orden del vi para crear un archivo de texto con un contenido muy sencillo. Este archivo nos permitirá probar los comandos que estudiaremos en próximos apartados. Llamaremos al archivo texto.dos y los pasos a seguir para confeccionarlo son los siguientes: 
 
 1º) $ vi texto.dos (inicia el editor y aparece en la última línea de pantalla su nombre texto.dos y archivo nuevo) 
2º) 	i 	 	(el editor, del modo orden, pasa al modo texto) 
	 
	3º) 
	1 Esta es la primera línea de texto del archivo. (introducir texto) 
	 
	 
	2 Esta es la segunda línea de texto del archivo. 
	 
	 
	3 Esta es la tercera línea de texto del archivo. 
	 
	 
	4 Esta es la cuarta línea de texto del archivo. 
	 
	 
	5 Esta es la quinta línea de texto del archivo. 
	 
	 
	6 Esta es la sexta línea de texto del archivo. 
	 
	 
	7 Esta es la séptima línea de texto del archivo. 
	 
	 
	8 Esta es la octava línea de texto del archivo. 
	 
	 
	9 Esta es la novena línea de texto del archivo. 
	 
	 
	10 Esta es la décima línea de texto del archivo. (fin de la introducción) 
	 
	 
	
	 
	4ª) 
	ESC (pulsar ESCAPE para pasar al modo orden) 
	 
	5º) 
	w (write, escribe en disco, el archivo editado) 
	 
	6º) 
	q (quite, salir del editor) 
 
 Podemos ver en pantalla el archivo creado tecleando simplemente $ cat texto.dos. Y si lo queremos imprimir directamente, sin ningún filtro de impresora, $ cat texto.dos > /dev/lp0. Es conveniente hacer una copia de seguridad del archivo y utilizarlo, sin temor de perderlo, para hacer las prácticas de los próximos apartados. Para hacer la copia $ cp texto.dos texto.original. 
 
 
1.4. Órdenes para suprimir texto. 
 	 
 Cuando vi edita un archivo, utiliza un buffer o almacén temporal principal en RAM y sólo cuando recibe la orden :w escribe, en disco, todo su contenido quedando los cambios definitivamente actualizados. Además del registro tamporal, antes mencionado, vi utiliza otros almacenes temporales secundarios en donde va guardando las modificaciones más recientes. Esto permite recuperar el estado anterior a cada modificación mediante la opción "deshacer". En el presente apartado veremos los diferentes órdenes para suprimir texto, las practicarremos sobre el archivo texto.dos y desharemos los cambios después de comprobar su funcionamiento. Cualquiera de las órdenes siguientes, que reste incompleta, se puede abortar pulsando al tecla ESC. No utilizar en ningún caso Control+z porque, este comando, está reservado al shell para detener y enviar a segundo plano un proceso activo como es en nuestro caso el editor vi. 
 
 	u 	--> 	(undo) Deshace/rehace el último cambio. Puede repetirse 	 	 	varias veces mediante el operador . (punto). 
 	x 	--> 	Suprime el caracter actual y, si se repite, elimina los 	 	 siguientes, por la derecha, sin salirse de la lína actual. 
 	[n] x 	--> 	Suprime n caracteres desde el actual hacia la derecha, sólo sobre la línea actual. 
 	X 	--> 	Suprime el carácter anterior al actual. Se puede repetir hasta agotar los caracteres de la línea en curso. 
[n] X 	--> 	Suprime n caracteres anteriores. No sale de la línea actual. 
 	J 	--> 	Elimina el cambio de línea en la línea actual. Puede repetirse hasta convertir todo el archivo en una línea única. 
 	[n] J 	--> 	(junction) Junta n líneas en una sola, es decir, suprime n saltos de línea. 
 	. 	--> 	El punto permite repetir la operación anterior, pero usado después de u sirve para rehacer la operación 	 	 	anteriormente deshecha. 
 
 Los comandos anteriores tienen en común el ser utilizados para suprimir un carácter, o bien un número determinado de ellos, es decir están concebidos para trabajar a nivel de carácter. A continuación veremos una serie de órdenes de vi para realizar funciones similares, pero a nivel de palabra. 
 
 	dw 	--> 	(delete word) Elimina todos los caracteres que hay desde el 	 	 actual hasta el fin de la palabra. Si se repite, suprime la palabra siguiente completa. Como máximo el fin de archivo. 
 	[n] dw 	--> 	Suprime n palabras. La primera puede no suprimirse 	 	 	completa, pues, depende de dónde se halle el cursor. Como 	 	 	máximo elimina hasta el fin de archivo. Otro formato 	 	 	equivalente al anterior es d [n] w. 
 	d$ 	--> Suprime desde el carácter actual hasta el fin de la línea d0 --> 	Borra desde el carácter anterior al actual hasta el inicio de 	 	 	 línea. 
 	D 	--> 	(delete) Borra todas las palabras que hay desde el cursor hasta el fín de la línea, pero mantiene el salto de línea. 
 	[n] D 	--> 	Elimina n líneas a partir de la actual. La primera puede no 
 ser completa dependiendo de dónde se halle el cursor. El 
 	 	 	máximo es el fin del archivo 
 
 En todos los casos anteriores la palabra, o palabras suprimidas, quedan en un registro temporalde modo que pueden "pegarse" posteriormente. Asímismo, todas estas opciones, admiten la posibilidad de deshacer, rehacer y repetir (u y .) vistas anteriormente, a excepción de d0 y d$ que no admiten repetición porque no van más allá de las palabras que hay en una línea. Observar que los caracteres 0 y $ se asocian con el inicio y con el fin de línea respectivamente. 
 
 	Las órdenes que vi ofrece para suprimir texto, a nivel de línea, son las siguientes: 
 
 	dd 	--> 	(delete) Suprime la línea actual completa. Se puede repetir 	 las veces que se quiera pues si llega al fin del archivo continúa borrando desde la línea anterior a la actual, hacia el principio del archivo hasta dejarlo vacío de texto. 
 	[n] dd 	--> 	Elimina n líneas desde la actual hacia el fin del archivo 	 	 	borrando como máximo, su última línea. Equivale a d[n]d dG --> Las líneas que se suprimirán son desde la actual hasta la última del archivo 
 	[n] dG 	--> 	En este caso se borra desde la actual a la línea número n. 	 	 	La línea n puede ser posterior a la actual o bien anterior sin más límite que la última o la primera línea del archivo. 
 	 	 	Otro formato equivalente es d[n]G. 
 
 Observar que dd y D no hacen lo mismo. Mientras la primera elimina la línea completa, la segunda sólo lo hace si el cursor está al principio. En todos los casos, la línea o líneas "cortadas" quedan en el registro temporal para poder ser "pegadas" después. Caso de usar dd, o [n]dd, la operación puede repetirse con el . (punto). Siempre está disponible la posibilidad de "deshacer". 
1.5. Órdenes para modificar el texto. 
 	 
 Para practicar los comandos de este apartado seguiremos haciendo uso del archivo texto.dos. Lo abriremos con vi, con la invocación costumbrada $ vi texto.dos, recordando que al arrancar el modo incial es el modo orden. Sin embargo durante el uso de varias de estas órdenes observaremos que vi pasa al modo edición y, que en este caso, al finalizar la modificación del texto, deberemos pulsar la tecla ESC para regresar al modo orden. Comenzaremos con el estudio de los comandos a nivel de carácter 
 
 	r 	--> 	(replace) Reemplaza el carácter actual. Después de pulsar 	 	 	la r se teclea el nuevo carácter. Se puede cambiar tan sólo 
 	 	 	un carácter. No es una orden repetitiva y no pasa al modo 	 	 	edición. 
 	[n] r 	--> 	Reemplaza los n caracteres que hay a partir del actual, 	 incluído éste, por el carácter tecleado después de la r. 
 Ejemplo: 7r@ convertirá en 7 arrobas los 7 caracteres. Se puede repetir sin salir de la línea. No pasa a edición. 
 	~ 	--> 	Convierte minúsculas en mayúsculas y viceversa. Se 
 	 	 puede repetir hasta el fin de línea y si se cambia de línea 
 (con la j o con la k) se puede continuar con la conversión. 
 	 	 	(Este carácter se obtiene con Alt+Gr+4, o con Alt 126). 	[n] ~ 	--> 	Convierte las n letras. Se puede repetir. Tampoco pasa a 	 modo edición. 
 	R 	--> 	(Replace) Reemplaza texto a partir del carácter actual. Entra 
 	 en modo texto pero sobreescribiendo. Se puede cambiar todo el texto que se quiera. Al terminar pulsar ESC. 
 	 
 Veremos ahora cómo se utilizan las órdenes de vi para modificar una o varias palabras. Observar que en todos los casos siguientes, al entrar en modo texto aparece en la última línea el mensaje ---INSERT--- para notificarnos que estamos en modo inserción o modo texto. Por otro lado, el último texto "cortado", queda almacenado en un registro de tipo temporal para poder ser "pegado" más tarde, si fuese necesario. Disponemos, pues, de las siguentes órdenes a nivel de palabra: 
 cw --> (change word) Cambia desde el carácter actual hasta el fin 
 de la palabra. Primero suprime, luego entra en modo texto, después tecleamos el nuevo texto y al final pulsamos ESC para volver al modo orden. 
	 
	[n] cw 
	--> 
	Cambia n palabras a partir de la actual. La primera sólo se 
	 
	 
	 
	cambia completa, si el cursor está en su primer carácter. 
	 
	 
	 
	Suprime primero, pasa a modo texto y terminaremos con 
	 
	 
	 
	ESC. Otro formato equivalente es c [n] w. 
	 
	C 
	--> 
	Cambia desde el carácter actual hasta el finde la línea. 
	 
	 
	 
	El resto del proceso igual a las dosórdenes anteriores. 
	 
	[n] C 
	--> 
	Cambia n líneas a partir de la actual. La primera sólo será 
 tomada completa si el cursor está en su primer carácter. El límite es el fin del archivo. El resto, idem a las anteriores. 
 
 De forma similar si deseamos modificar texto a nivel de línea, disponemos de varias posibilidades para suprimir una o más líneas, entrar en modo inserción, añadir el nuevo texto deseado y finalmente, pulsando ESC, volver al mod orden del vi. En todos los comandos siguentes, el último texto "cortado" queda también guardado en el registro temporal para poder ser "pegado" posteriormente. Estas opciones son: 
 
 	cc 	--> 	Cambia la línea actual completa. No tiene en cuenta la posición del cursor, cosa que el comando C sí hace. 
 	[n] cc 	--> 	Cambia n líneas completas a partir de la actual. La línea 	 	 	actual siempre se toma completa sin considerar la posición 
 	 del cursor, a diferencia de [n] cw. Otro formato equivalente 	 	 	es c [n] c. 
 	cG 	--> 	Las líneas que se cambian son desde la actual hasta la última línea del archivo 
 	[n] cG 	--> 	En este caso se cambia desde la actual a la línea número n. 	 	 	La línea n puede ser posterior a la actual o bien anterior 
 sin más límite que la última o la primera línea del archivo. 
	 
	 
	 
	Otro formato que da el mismo resultado es c [n] G. 
	 
	S 
	--> 
	Se comporta igual que cc. 
	 
	[n] S 
	--> 
	Se comporta igual que [n] cc. 
 
 
1.6. Copiar, cortar y pegar texto en vi. 
 	 
 
 Existen en vi muchas opciones diferentes que seleccionan una parte del texto para copiarlo, o cortarlo, y depositarlo en un registro temporal (especie de portapapeles) y después pegarlo en cualquier otra parte de ese mismo archivo de texto o de otro que el editor pueda tener abierto al mismo tiempo. 
 
 Para probar las diferentes órdenes que vamos a exponer en este apartado emplearemos otra vez el archivo texto.dos. Para pegar el contenido del "portapapeles" en el lugar donde se halle el cursor, utilizaremos la tecla p (inicial de paste). El primer grupo de comandos para seleccionar y copiar del texto una o varias palabras es: 
 
 	yw 	--> 	(yank word) Copia desde el carácter actual hasta el fin de la palabra. (Ver la similitud con dw para cortar). 
 	[n] yw 	--> 	Copia n palabras desde la actual en adelante con el límite 
 máximo del fin del archivo. La primera sólo se copiacompleta si el cursor está sobre su primer carácter. Admite también el formato y [n] w. (Similar a [n] dw y d [n] w para 	 	 	suprimir palabras). 
 	y$ 	--> 	(yank) Copia desde el carácter actual hasta el fín de la línea. (Ver la similitud con d$ para cortar). 
 	y0 	--> 	Copia desde el carácter anterior al actual hasta el inicio 	 	 	de línea. (Análogo a d0 para cortar). 
 	 
 Con el segundo grupo de comandos podemos copiar una línea o un bloque de texto, es decir, un conjunto de líneas consecutivas, en el registro temporal. Estas órdenes son: 
 
 	yy 	--> 	(yank) Copia la línea actual completa sin tener en cuenta el carácter sobre el que se halla el cursor. (Es similar a dd). 
 	[n] yy 	--> 	Copia n líneas completas a partir de la actual sin sobrepasar la última línea del archivo. (Similar a [n] dd) 
 	y G 	--> 	Copia hasta la última línea contando desde la actual, ambas inclusive. (Guarda similitud con d G para cortar). 
 	[n] y G 	--> 	Copia desde la actual hasta la línea número n, ambas 
 inclusive. Admite también el formato y [n] G. (La similitud con [n] d G y d [n] G es evidente). 
 	Y 	--> 	Misma función que yy. (No guarda similitud con D). 
 	[n] Y 	--> 	Misma función que [n] yy. (No guarda similitud con [n] D). 
 
 
 Para cortar texto se emplean los comandos ya vistos en el apartado 2.4. para carácter/es (x, [n] x ), palabra/as (dw, [n] dw, d0, d$, D, [n] D) o línea/líneas (dd, [n] dd, dG, [n] dG) pues todos ellos guardan en el buffer o registro temporal el texto que han suprimido, aunque debe tenerse en cuenta que en este registro sólo permanece el texto cortado en la última operación. 
 
 Para pegar el texto existente en el registro temporal, como consecuencia de la previa operación de copia o de supresión, tenemos las siguientes posibilidades: 
 
 	p 	--> 	(paste) Pega a partir de la posición del cursor el contenido del "portapapeles". Si éste contiene una o varias palabras, la inserción se produce en la misma línea a partir del carácter siguiente al actual. Sin embargo, si contiene una o varias líneas completas, se insertan debajo de la línea actual. 
 	[n] p 	--> 	Pega n veces el contenido del "portapapeles" a partir de, o 
 debajo de, la posición del cursor según se trate de palabras o de líneas completas. 
 	P 	--> 	Pega antes de la posición del cursor el contenido 
 del "portapapeles". Si éste contiene una o varias palabras, el último carácter pegado se situará delante del al actual. Sin embargo, si contiene una o varias líneas completas, la última línea pegada quedará encima de la actual. 
 	[n] P 	--> 	Pega n veces el contenido del "portapapeles" antes de, o 
 encima de, la posición del cursor según se trate de palabras o de líneas completas, respectivamente. 
1.7. Los registros temporales de vi. 
 	 
 Cuando el editor vi trabaja en modo orden puede utilizar, simultáneamente, hasta 36 registros temporales. Esta cantidad se distribuye en dos grupos: el primero está formado por 24 registros que se nombran con la serie de letras desde la a hasta la z, mientras que el segundo lo forman sólo 9 y se nombran mediante los dígitos del 1 al 9 quedando éstos últimos registros bajo el control del editor aunque su contenido puede ser consultado por el usuario durante el proceso de edición. 
 
 Lo realmente útil de todo esto es poder copiar texto en todos ellos de forma totalmente independiente y después pegarlo en el orden y lugar deseado. Para utilizar estos registros debemos escribir el nombre precedido por las comillas dobles y seguido de la opción Y para copiar o de la opción p (si lo que necesitamos es pegar después-debajo de la posición del cursor). También está disponible la opción P para pegar antes-arriba de la posición del cursor. Igualmente podemos copiar una o más líneas en cada registro así como pegar una o más veces su contenido. Si necesitamos añadir texto al contenido de un registro, no vacío, sin sobreescribirlo debemos referirnos al mismo usando su misma letra pero en notación mayúscula. En otras palabras, si se emplea la letra minúscula, el texto se copia siempre a partir del principio del registro, pero si usa la letra mayúscula el texto se copia a continuación del espacio ocupado. 
 
 Es extraordinaria la potencia que ofrecen los múltiples registros de vi. Con el fin de invitar a su empleo realizaremos un ejercicio práctico para probar el uso de algunas de sus muchas posibilidades. Comenzaremos abriendo el archivo texto.dos tecleando $ vi texto.dos y luego realizaremos la siguiente secuencia de órdenes para copiar. 
 
	 
	Cursor en línea 1 
	--> 	teclear: 	"a1Y 
	 
	 	 
	 (La primera línea del texto se copia en el registro a) 
	 
	 
	
	 
	Cursor en línea 2 
	--> 	teclear 	"b2Y 
	 
	 	 
	 (Las líneas 2ª y 3ª del texto se copian en el registro b) 
	 
	 
	
	 
	Cursor en línea 4 
	--> 	teclear 	"c3Y 
	 
	 	 
	 (Las líneas 4ª, 5ª y 6ª del texto se copian en el registro c)
	 
	 
	
	 
	Cursor en línea 7 
	--> 	teclear 	"d2Y 
	 
	 	 
	 (Las líneas 7ª y 8ª del texto se copian en el registro d) 
	 
	 
	
	 
	Cursor en línea 9 
	--> 	teclear 	"D2Y 
 	 (Las líneas 9ª y 10ª del texto se copian y añaden al contenido del registro d) 
 
 Observar que, en este momento, tenemos todo el archivo texto.dos distribuído en los cuatro registros "a, "b, "c y "d. Si colocamos el cursor en la primera línea y tecleamos dG borraremos todo el texto. Podemos recuperarlo en el orden que queramos y con el contenido que nos parezca mejor a partir de los registros. Por ejemplo podemos hacer la siguiente práctica: 
 
Situar cursor en la línea 1 --> 	teclear 	"dp 
 	 	 	 (Aparecen las líneas 7ª, 8ª, 9ª y 10ª debajo de la 1ª). 
 	 
Situar cursor en la línea 1 --> 	teclear 	"cP 
 (Aparecen las líneas 4ª, 5ª y 6ª encima de la 7ª). 
 	 
	Situar cursor en la línea 1 --> 
	teclear 	"bP 
	 	 	 
 	 
	 (Se copian las líneas 2ª y 3ª encima de la 4ª). 
	Situar cursor en la línea 1 --> 
	teclear 	"a5P 
	 	 	 
	 (Se copia la línea 1ª cinco veces encima de la 2ª). 
 
 El formato de las órdenes también es flexible. Así la orden de copia "a [n] Y en donde n es opcional (por defecto vale 1)indica el número de líneas que se copian en el registro a, a partir de la línea actual, incluída ésta, puede también escribirse [n] "aY. Para la operación de pegado también es posible el empleo de [n] "bp en lugar de "b [n] p en el caso de referirnos, por ejemplo, al registro b. De todos modos, puede que resulte más nemotécnica la segunda sintaxis. En todos los casos de copia, se puede utilizar yy en lugar de Y. Por ejemplo "c3yy equivale a "c3Y. 
 
 
2. El modo texto de vi. 
 
 
 Es el modo básico para introducirtexto, a través del teclado, en un archivo. En este modo de trabajo cada tecla pulsada es interpretada por vi como texto y no como una orden dirigida al editor. Existen algunas excepciones, como la tecla ESC cuya finalidad es, precisamente, pasar del modo texto al modo orden. Otro caso es la combinación Ctrl+v que pulsada antes del ESC invalida su función normal permitiendo así introducir secuencias de escape dentro de un archivo. Recordar que una secuencia de escape se llama así porque su primer carácter es el carácter ESC. 
 	 
 Existen varias opciones para entrar en modo texto desde el modo orden. Algunas ya se han visto en el apartado 2.5. dedicado a los comandos para la modificación de texto. En general éstas son órdenes que suprimen el texto seleccionado y luego dan paso automáticamente al modo texto del editor. Hay otras formas posibles, cada una con sus particularidades, que veremos a continuación. Se da por sentado que todas deben teclearse dentro del modo orden. Sin embargo, cuando estamos en modo texto, debemos pulsar ESC para volver al modo orden. Estas órdenes son: 
 
 
 a --> (add) Añade el texto que se teclee después de la a a partir de 
 	 la posición siguiente al carácter actual. Si en la línea hay 
 	 	 	más texto, éste será desplazado hacia la derecha. En la parte 	 	 	inferior de la pantalla aparece el mensaje: -- INSERT --, 	 	 	para notificarnos que estamos en modo inserción de texto. 
 	 
 	A 	--> 	Añade el texto a partir del último carácter de la línea 
 	 actual y antes del carácter de cambio de línea. En lo demás se comporta como la orden anterior. 
 	 
 	i 	--> 	(insert) Inserta texto antes del carácter actual. Si existen 
 caracteres, después del actual, éstos serán desplazados hacia 	 	 	la derecha a medida que se introduzca texto. 
 
 	I 	--> 	Inserta texto al principio de la línea actual. Desplaza, a la derecha, el texto existente. 
 
	 
	o 	--> 
	(open) Abre una línea en blanco por debajo de la actual. 
	 
 
	[n] o ESC --> 
	Abre n líneas en blanco por debajo de la línea actual. 
	 
	O 	--> 
	Abre una línea en blanco por encima de la actual. 
	 
	[n] O ESC --> 
	Abre n líneas en blanco por encima de la actual. 
 	 
 En modo texto podemos utilizar varias teclas como "suprimir" o backscpace 
(retroceso). Ctrl+t añade una tabulación al principio de la línea actual. La combinación Ctrl+w suprime la última palabra escrita. La combinación Ctrl+y copia en la posición del cursor el mismo carácter que hay sobre la línea superior al mismo. Si usamos Ctrl+p nos va seleccionando todas las palabras del texto como una especie de buscador. Algunas de estas opciones dependen, en su comportamiento, de la versión de vi utilizada y de la configuración adoptada. 
 
 
2.1. Cómo buscar las cadenas de texto. 
 
 Los comandos de búsqueda de cadenas de caracteres dentro de un texto se ejecutan en el modo orden de vi. Sin embargo parece más adecuado tratarlas aquí porque cuando se quiere localizar una cadena, en general, es para modificarla ó suprimirla o ampliarla. Podemos localizar un segmento de texto siguiendo estos pasos: 
 
	 
	1º 
	--> 
	Asegurarnos de que estamos en modo orden. 
	 
	2º 
	--> 
	Teclear la barra seguida del texto buscado. Por ejemplo: para 
	 
	 
	 
	buscar, en nuestro texto.dos, la palabra "novena" 
	 
	 
	 
	escribiremos /novena. El cursor se colocará al principio de 
	 
	 
	 
	dicha palabra, siempre que ésta esté escrita así. 
 
 El buscador comienza en la línea actual y avanza hacia el fin del archivo. Si no aparece ninguna coincidencia, continúa con la primera línea del archivo hasta alcanzar de nuevo la línea actual. Si después de todo el barrido del texto no aparece ninguna ocurrencia, aparece en la parte inferior de la pantalla el mensaje -- Pattern not found -- (Muestra no encontrada). Es importante especificar correctamente la secuencia de caracteres (patrón) a buscar para obtener el resultado esperado. Probar haciendo /de, /del, /linea, /línea, etc. 
 	 
 Cuando en el texto hay más de una coincidencia, el cursor se detiene en la primera que encuentra, buscando siempre en el orden expuesto en el párrafo anterior. Para ver la siguiente cadena, que puede coincidir, se debe pulsar la tecla n (de next). Si, durante el recorrido, se decide por volver hacia atrás, se puede pulsar la tecla N. Probar, por ejemplo, haciendo /es, /la, /Esta, etc. 
 	 
 Existe otra alternativa para buscar cadenas de texto en lo que a su sintaxis se refiere. El resultado obtenido es el mismo, pero tal vez resulta más intuitiva y fácil de recordar. Consiste en reemplazar el carácter / por el ?. Para utilizarla, seguiremos en modo orden, tecleando, por ejemplo, ?de, ?del, ?linea, ?línea, etc. Un detalle: ahora las funciones de la n y de la N se invierten, es decir, con la minúscula retrocedemos y con la mayúscula avanzamos por el texto en edición. 
 
 
3. Modo : (dos puntos) de vi. 
 
 Se llama así porque todos sus comandos van precedidos necesariamente por el carácter :. Por otro lado, también se le llama modo en última línea debido a que todas las órdenes, en este modo, se escriben en la última línea de la pantalla. El modo dos puntos, además, no es mas que una variante del modo orden. El proceso a seguir para utilizar los comandos de este modo de funcionamiento de vi es siempre el mismo y está formado por la siguiente secuencia: 
 
Comprobar que el editor está en modo orden. Caso de duda, pulsar ESC. Teclear :. Aparecerá el cursor, junto a los dos puntos, en la última línea de la pantalla invitando a introducir una orden. 
Escribir el comando correspondiente. Puede contener uno o más carácteres. 
Finalmente pulsar la tecla INTRO para iniciar la ejecución. 
 
 Existen muchas formas de utilizar los comandos de vi en última línea. Los veremos agrupándolos de acuerdo con su función. 
 
 
3.1. Órdenes relacionadas con la escritura de archivos. 
 
	 
	:q 	--> 
	(quit) Abandona el editor siempre que no se haya efectuado 
	 
	 	 
	ningún cambio en el archivo editado. Si se ha modificado el 
	 
	 	 
	archivo, este comando, no deja salir y muestra el mensaje: 
	 
	 	 
	"Archivo modificado desde la última escritura en disco". 
	 
	:q! 	--> 
	Fuerza el abandono del editor, sin guardar en disco los 
	 
	 	 
	cambios realizados sobre el archivo. 
	 
	:w 	--> 
	(write) Escribe en disco el archivo editado actualizando 
	 
	 	 
	todos los cambios sin abandonar el editor. La escritura se 
	 
	 	 
	efectúa bajo el mismo nombre que originalmente tenía el 
	 
	 	 
	archivo. Equivale al "guardar" de cualquier editor. A partir 
	 
 
	 	 
	de este momento ya no se pueden deshacer los cambios. 
	 
	:wq 	--> 
	Escribe y abandona, en cualquier caso, con o sin 
	 
 
	 	 
	modificaciones. (Atención: no es lo mismo :wq que :qw). 
	 
	:w archivo --> 
	Escribe en disco, con el nombre archivo, todo el texto en 
	 
	 	 
	edición. Este nombre puede ser diferente al original. 
	 
 
	 	 
	Equivale, pues, al guardar como de cualquier editor. 
	 
	:m,n w archivo --> 
	Escribe en disco desde la línea m hasta la n, ambas 
	 
	 	 
	inclusive, con el nombre archivo. Deberá ser m < n, ya que 
	 
	 	 
	si no es así, vi se quejará y preguntará si intercambia el 
	 
	 	 
	valor de m por n. En algunas versiones no preguntará y 
	 
	 	 
	simplemente solicitará que se cumpla la condición m < n. 
 	 
 En los dos últimos casos, al guardar todo el texto, o una parte de él, con el nombre archivo, podría darse el caso de que exista otro archivo con este mismo nombre. vi no dejará escribir tal archivo y nos veremos obligados a elegir una de las siguientes alternativas: 
 
Buscar otro nombre diferente. Darle una ruta diferente, sea ésta absoluta o relativa,. 
Forzar la sobreescrituradel archivo existente, empleando la misma sintaxis acompañada del carácter !, es decir, :w! archivo y :n,m w! archivo respectivamente. 
 
Ejercicio práctico: 
	Abrir el texto.dos, con vi. 	 Colocar el cursor en cualquier lugar. 
	--> 
	$ vi texto.dos 
	Asegurarse de estar en modo orden. --> 
	ESC 
	
	Seleccionar un bloque y guardarlo. 
	--> 
	:5,10 wq texto.tres 
	Abrir el texto.tres con vi. 	 
	--> 
	$ vi texto.tres 
Comprobar que el nuevo archivo contiene sólo las últimas 5 líneas del original. 
 
 Observar que en todas las opciones de escritura en disco, es decir, en todas aquéllas en que se usa la letra w, aparece en la línea inferior de pantalla el nombre del archivo escrito, el número de líneas y el tamaño en bytes del mismo. 
 
 
3.2. Órdenes relacionadas con la lectura y edición de archivos. 
 
 Del mismo modo que vi tiene comandos para escribir, los tiene también para leer archivos desde el disco e insertarlos en cualquier lugar del texto que tiene abierto. Estas órdenes son: 
 
	 
	:r 	--> 
	(read) Lee desde el disco el contenido del archivo cuyo 
	 
	 	 
	nombre se encuentra actualmente en edición. En este caso se 
	 
	 	 
	lee sólo el contenido del archivo, pero no su nombre, 
	 
	 	 
	pues, vi, escoge el mismo nombre con el cual se abrió dicho 
	 
	 	 
	archivo. El texto leído se situará a partir de la posición del 
	 
	 	 
	cursor. 
	 
	:r nombre --> 
	Lee y añade al archivo, actualmente en edición y a partir de 
	 
	 	 
	la posición del cursor, el contenido de un archivo en disco 
	 
	 	 
	llamado nombre. Se mantiene el nombre del archivo origen 
	 
	 	 
	abierto por vi, si lo tiene. El texto leído podrá insertarse en el 
	 
	 	 
	caso de que el cursor no se halle al final del archivo en 
	 
	 	 
	edición y en tal caso el texto original será desplazado hacia 
	 
	 	 
	el fin del mismo. 
	 
	:e nombre --> 
	Lee el contenido y el nombre de un archivo en disco. En 
	 
	 	 
	verdad se inicia una nueva edición, por tanto al cambiar de 
	 
	 	 
	nombre y de contenido, se abandona el archivo que había 
	 
	 	 
	hasta ahora en edición el cual deberá o bien guardarse o bien 
	 
	 	 
	forzar su abandono. 
 
Ejemplo de tipo práctico: 
 	 
1.Abrir el editor, sin nombre de archivo y sin contenido: --> $ vi 
2.Leer el archivo actual en edición. (No se lee nada): --> :r 
3.Leer el contenido de un archivo en disco. (Ya tiene nombre) --> :r texto.dos 
4.Editar un nuevo archivo. (Nombre y contenido). 	 --> :e texto.tres 5.El caso anterior dará error. (Para abandonar el texto.dos) --> :e! texto.tres 
6.Se queda en edición el texto.tres. 
7.Se vuelve a leer texto.tres. 	 	 --> :r 
8.Se guarda un archivo de 10 líneas, con otro nombre. --> :w texto.cuatro 
9.Abandonar el editor. 	 	 	 --> :q 
 	 	 
 	Con el fin de facilitar información sobre el archivo en edición existe un comando en modo dos puntos, :f (file), que nos imprime el nombre del archivo, un mensaje sobre si se ha modificado o no, el número total de líneas del mismo y las líneas que hay desde la primera hasta la actual (este valor aparece, además, expresado en t%). La combinación Control+g equivale a :f. 
 	 
 Otra de las posibilidades que admite el uso de vi consiste en pasarle durante la invocación, como si fueran argumentos, una lista de dos o más nombres de archivo. Posteriormente, para pasar a editar uno u otro basta con utilizar, en modo dos puntos, la opción n (next) para editar el siguiente y la opción N para volver a la edición del anterior. Si se ha efectuado algún cambio, antes de abandonar un archivo, deberá escribirse en disco o forzar a ignorar los cambios. Veamos un ejemplo: 
 
 $ vi texto.dos texto.tres texto.cuatro (Se incia el editor con tres archivos) 
 :f (Muestra que está en edición el texto.dos) 
 :n (Pasa a editar el texto.tres) 
 :f (Muestra los detalles del archivo texto.tres) 
 	Aquí se puede modificar el texto.tres 
 :w (Guarda los cambios efectuados) 
 :n (Pasa a la edición del texto.cuatro) 
 	Aquí se puede modificar el texto.cuatro 
 :N! (No guarda cambios y pasa al anterior) 
 
 Recordar que para eliminar los caracteres que aparecen en la pantalla y que proceden de mensajes del editor, o bien de otros mensajes del terminal, podemos usar Ctrl+l. 
 
 	 
3.3. Órdenes relacionadas con los comandos del shell. 
 
 Son órdenes que permiten salir al shell, ejecutar sus comandos, introducir en el texto la salida de éstos y regresar al vi. 
 
	 
	:sh 	--> 
	(shell) Entra en el intérprete de comandos sin abandonar, 
	 
	 	 
	definitivamente, el editor vi ni la edición del texto en curso. 
	 
	$ exit 	--> 
	Sale del intérprete de comandos y vuelve a la edición del 
	 
	 	 
	texto abandonada anteriormente. 
	 
	:! comando --> 
	Ejecuta un comando del shell, sin abandonar la edición. 
	 
	 	 
	Los resultados aparecen en pantalla pero no entran a formar 
	 
	 	 
	parte del mismo. Por jemplo: :! cal 2003, :! mkdir dir1. 
 	:r! comando --> (read) Ejecuta, introduciendo su salida en el texto, un 
	 
	 
	 
	comando del shell. En este caso la salida del comando queda 
	 
	 
	 
	redirigida hacia el archivo que está en edición y pasa a 
	 
	 
	 
	formar parte del mismo. Recordar que, por defecto, la 
	 
	 
	 
	salida de los comandos del shell, es la pantalla. 
Ejemplo práctico: 
 Con el fin de repasar algunas de las tareas más comunes en Linux, al tiempo que practicamos con el vi, crearemos un archivo llamado "regalo" y lo copiaremos en un disquete que será formateado y montado sin salir del editor. Para desarrollar este ejercicio seguiremos los pasos siguientes: 
 
 	1º. $ vi regalo 	 (Se inicia el editor y se da nombre al archivo) 
 	2º. i 	 	 	 	 (Entra en modo texto) 
 	3º. Querido amigo: (Comienza la introducción de texto) 	 Adjunto te envío el calendario del año en que naciste. 
 	4º. ESC (Pasa al modo orden) 	5º. :sh 	 (Salida al shell) 
 	6º. $ fdformat /dev/fd0u1440 (Formato del disquete a bajo nivel) 
 	7º. $ mkfs -t ext2 /dev/fd0 (Creación del sistema de archivos) 
 	8º. $ exit (Regreso al editor) 
 9º. :r! cal -y 1980 (Introduce en el texto el calendario del año 1980) 
 10º. i 	 	 	 (Regreso al modo texto) 
 11º. Saludos, Juan. (Finaliza la introducción de texto en el archivo) 
 12º. ESC (Paso al modo orden) 
 13º. :w (Guarda el archivo en disco) 
 14º. :! mount -t ext2 /dev/fd0 /floppy (Montar el disquete) 
 15º. :! cp regalo /floppy 	 	 (Copiar el archivo en el disquete) 
 16º. :! umount /floppy 	 	 (Desmontar el disquete) 
 17º. :q 	 	 	 (Abandonar el editor) 
 
3.4. Órdenes para reemplazo de cadenas de texto. 
 	 
 Durante la edición de un programa fuente, o de un guión (script), es muy probableque necesitemos cambiar el nombre de alguna variable, de una función o de parte de una cadena de texto. Puede, incluso, que todas, o sólo algunas, de las veces que ésta aparece en el texto del archivo necesitemos efectuar el cambio. Para estas tareas resultan de suma utilidad las herramientas que vi pone a nuestra disposición. Son órdenes que se escriben en última línea, es decir, en modo orden y precedidas por los dos puntos. Las veremos y practicaremos utilizando el archivo "texto.dos". Las más importantes son las siguientes: 
 
	:s /cadena_a/cadena_b --> 
	(search) Busca y reemplaza la cadena_a por la cadena_b. El 
	 	 
	 
	cambio se produce sólo en la línea actual y sólo la primera 
	 	 
	 
	vez que aparece en la línea, tomando como referencia la 
	 	 
	 
	posición del cursor. Ejemplos: :s /de/DE, :s /Esta/estos. 
	:s /cad_a/cad_b/g 
	--> 
	(global) En la línea actual, todas las veces que aparece la 
	 	 
	 
	cadena cad_a, será reemplazada por la cadena cad_b. No 
	 	 
	 
	importa la posición del cursor. Debe prestarse especial 
	 	 
	 
	atención a la definición de ambas cadenas. Por ejemplo 
	 	 
	 
	:s /a /A/g es diferente a :s / a/A/g. Comprúebese. 
	:m,n s /cad_a/cad_b 
	--> 
	En todas las líneas comprendidas entre la número m y la 
	 	 
	 
	número n, ambas inclusive (m < n), la cadena cad_a será 
	 	 
	 
	reemplazada por la cadena cad_b. Sólo se tendrá en cuenta la 
	 	 
	 
	primera aparición, es decir, se modificará una columna del 
	 	 
	 
	texto. Ejemplos :1,$ s /de/DE y :1,$ s /deDE/g. 
	:s /cad_a/cad_b/c 
	--> 
	(confirm) Pide confirmación antes de proceder a la 
	 	 
	 
	sustitución de la cadena cad_a por la cadena cad_b, cada vez 
	 	 
	 
	que ésta aparezca. Responder con y/n para aceptar/descartar 
	 	 
	 
	el cambio. Probar por ejemplo con :1,5 s/de/DE/gc. 
 
 Como se ha visto en el último ejemplo, antes expuesto, se pueden combinar las opciones g (global) y c (confirm). Es más, son dos opciones no obligatorias al igual que el rango. El rango nunca deberá exceder en sus valores más allá del número de la línea primera o de la línea última y siempre deberá escribirse en primer lugar la línea de menor numeración. Caso de no cumplirse alguna de las dos condiciones anteriores, el reemplazo no se efectuará. En general la sintaxis, para la búsqueda y sustitución de cadenas se escribe según sigue, teniendo en cuenta que las partes no obligatorias se muestran siempre entre corchetes. 
 
 	: [rango] s /texto_antiguo/texto_nuevo/ [g] [c] 
 
 	Otras posibilidades para reemplazar cadenas de texto: 
 
	:.,+n s /cad_a/cad_b/ 
	--> 
	Desde la línea actual hasta n líneas más abajo, la cadena 
	 	 
	 
	cad_a será reemplazada por la cadena cad_b. Esto es así 
	 	 
	 
	porque el carácter . (punto) hace referencia a la línea actual. 
	 	 
	 
	Ejemplo para probar: :.,+3 s /del archivo/de mi archivo. 
	:-n,. s /cad_a/cad_b/ 
	--> 
	Desde n líneas antes hasta la línea actual inclusive, la 
	 	 
	 
	cadena cad_a será sustituída por la cadena cad_b. Ejemplos: 
	 	 
	 
	:-9,. s /te/ta/g. Observar que si el rango se sale de la la 
	 	 
	 
	primera línea, el reemplazo no se lleva a cabo. 	 
	:1,$ s /cad_a/cad_b/ 
	--> 
	Todas las líneas del archivo quedarán incluídas en la 
	 	 
	 
	búsqueda y sustitución de la cadena cad_a por la cadena 
	 	 
	 
	cad_b. Es decir, desde la línea 1 hasta la última del archivo. 
	 :% s /cad_a/cad_b/ 
	--> 
	Mismo efecto que la opción anterior :1,$ s /cad_a/cad_b/. 
	 	 
	 
	En realidad, el %, es una forma abreviada de poner 1,$ 
	:s /cad_a// 
	--> 
	Suprime la cadena cad_a. Sólo es necesario no colocar 
	 	 
	 
	ningún carácter en el espacio reservado a la cadena 
	 	 
	 
	reemplazo, es decir deben escribirse las dos barras // juntas. 
	 	 
	 
	Ejemplo: :1,3 s /archivo//c. 
	:s /^/cad_a/ 
	--> 
	Añade al principio de la línea actual la cadena cad_a. No 
	 	 
	 
	hay reemplazo sino inserción. El carácter ^ apunta al 
	 	 
	 
	principio de la línea pero en realidad no existe como tal. 
	 	 
	 
	Probar con el ejemplo: :1,3 s /^/INICIO/ para verlo. 
	:s /$/cad_a/ 
	--> 
	Añade al final de la línea actual la cadena cad_a. Igual que 
	 	 
	 
	en el caso anterior, el carácter, $ no existe como tal pero 
	 	 
	 
	apunta al final de la línea. Dentro de un archivo de texto, el 
	 	 
	 
	$ hace referencia a la última línea. Para ver los resultados, 
	 	 
	 
	practicar con el ejemplo siguiente: :1,$ s /$/FIN/c . 
 
 Si se trabaja en un xterm, para obtener el carácter ^ debe pulsarse mayúscula+[ y luego la barra de espacio. Si, por el contrario, estamos en un terminal podemos obtener directamente este carácter sabiendo que su valor decimal es 94 (Alt+94). Un xterm es un terminal emulado dentro del entorno gráfico X-windows de Unix. 
 
 	 
4. Miscelánea. 
 
 A través de todos los apartados anteriores, incluídos en este capítulo dedicado al editor vi, no se han visto la totalidad de las posibilidades que éste editor ofrece. Sencillamente hemos tratado de dar un repaso entorno a los puntos más importantes o de uso más frecuente. Si necesitamos mayor información siempre podemos recurrir a las páginas del manual $ man vi. 
 
 No obstante, como complemento a lo anterior y cierre de esta unidad, veremos algunas posibilidades o "trucos" que, en ocasiones, para algunos usuarios de vi pueden resultar de interes: 
 	 
 1.- Para ordenar por orden alfabético, con respecto a una palabra de cada línea, un 
rango de líneas del texto de un archivo: : m,n ! sort [-kn]. Por ejemplo: :% ! sort -k5 
 	 
 2.- Para ordenar por orden alfabético, respecto de la primera palabra de cada línea, omitir el parámetro opcional, es decir, teclear : m,n ! sort . 
 	 
 3.- Para mostrar en pantalla el número de línea y el número de columna por donde se desliza el cursor, utilizar el comando :set ruler. Para desactivar esta función escribir :set noruler. 
 
 4.- Para ver las líneas del archivo numeradas a partir de la primera y hacia el fin del archivo utilizar :set number y para desactivarla :set nonumber. La numeración sólo afecta a la presentación del texto pero no modifica el contenido del archivo en edición. 
 	 
 5.- Para ver todas las opciones que se puede personalizar mediante la orden set, que son muchas, más de 200, teclear :set all. Nota: La orden set del vi no tiene nada que ver con la orden del shell que lleva el mismo nombre ya que la primera se escribe "dentro" del modo orden de vi y la segunda se escribe "dentro" del intérprete de comandos, a continuación del prompt del mismo. 
 
 6.- Las diferentes opciones de la orden set, del vi, pueden incluirse en una variable de entorno llamada EXINIT que se inicializa en un archivo como el .bashrc al empezar una sesión. Por ejemplo, si queremos tener disponibles el indicador de línea y de columna, al tiempo que deseamos ver las líneas numeradas, cada vez que arrancamos el vi, debemos incluir en .bashrc una línea con el contenido siguiente: 
 	 	export EXINIT="set ruler number" 
 
 7.- En modo orden, si colocamos el cursor debajo de cualquier carácter del texto, y luego tecleamos la secuencia ga, nos aparecerá en la parte inferior de la pantalla su valor en decimal, en hexadecimal y en octal. Así, por ejemplo, si seleccionamos la a nos mostrará : <a> 97, Hex 61, Octal 141. En efecto: 97 --> 01100001 --> 0110 0001 (61) --> 001 100 001(141). 
 	 
 8.- Si, desde el modo orden, se teclea ZZ se guarda en disco el archivo editado actualizando todas las modificaciones. Esta opción equivale, pues, a :wq. Recordar que no se debe no utilizar la combinación Ctrl+z porque entonces el proceso se detendría y quedaria parado en segundo plano (background). Si esto último ocurre, involuntariamente, utilizar desde el shell el comandofg +1 para reanudar dicho trabajo en primer plano. 
 
 9.- Cuando vi se inicia con varios archivos, que se le pasan como argumentos, puede usarse el "portapapeles" para copiar bloques de varias líneasde texto de un archivo a otro. Recordar que la copia se efectúa con yy y el pegado con p y que para pasar de un archivo a otro sirve la opción n. Ver apartados 2.5. y 4.2. para más detalles. 
 
 
 	 	 	 ------ end vi ------ 
 
 
 
5. Índice de contenidos. 
 
1. Introducción. ¿Qué es vi? 	 
 
 
2. El modo orden de vi. 
2.1. Órdenes para desplazar el texto en la pantalla. 
 
2.2. Órdenes para mover el cursor a través del texto. 
 	 
2.3. Creación de un archivo de texto. 
 
2.4. Órdenes para suprimir texto. 
 
2.5. Órdenes para modificar el texto. 
 
2.6. Copiar, cortar y pegar texto en vi. 
 
2.7. Los registros temporales de vi. 
 
 
3. El modo texto de vi. 
3.1. Cómo buscar las cadenas de texto. 
 
 
4. Modo : (dos puntos) de vi. 
4.1. Órdenes relacionadas con la escritura de archivos. 
 	 
4.2. Órdenes relacionadas con la lectura y edición de archivos. 
 	 
4.3. Órdenes relacionadas con los comandos del shell. 
 	 
4.4. Órdenes para reemplazo de cadenas de texto. 
 	 
 
5. Miscelánea. 
 
 
6. Índice de contenidos. 
 
 	 	 
 
GVA CEFIRE ESPECÍFICO DE FP CHESTE V. Ros Brandon - M. Blanes Monllor 
 	 -- 2 -- 
 	 	 
 
GVA CEFIRE ESPECÍFICO DE FP CHESTE V. Ros Brandon - M. Blanes Monllor 
 	 -- 1 -- 
 
INTRODUCCIÓN AL USO 
Y ADMINISTRACIÓN DEL
 
SISTEMA 
OPERATIVO LINUX. EDI
TOR DE TEXTOS VI
 
INTRODUCCIÓN. ¿QUÉ 
ES 
VI
? 
 
 
 
 
 
 
En cualquier sistema operativo existe siempre un editor de texto sin formato para crear o 
modificar archivos de configuración, programas fuente o programas interpretados. Unix tiene más 
de uno pero el más popular, ya que se ha convertido en un estándar qu
e no falta en ninguna 
distribución de Linux, o de Unix, es el 
vi
. Se puede encontrar en 
/usr/bin/vi 
como un archivo 
binario. Su nombre proviene de "visual" y su predecesor es 
ed 
un antiguo editor de líneas al estilo 
del 
edlin
 
del DOS. Actualmente 
vi
 
está r
eemplazado por 
/usr/bin/vim, 
de
 
vi m
ejorado, pero se 
mantiene su nombre original mediante un enlace simbólico que apunta a 
vi.
 
Otro enlace que 
apunta también al 
vi
 
es el 
/usr/bin/view. 
Por tanto, si tecleamos 
vi
, 
vim 
o 
view
 
estamos abriendo el 
mismo edit
or. Sus archivos de configuración se encuentran en 
/usr/share/vim 
y la versión 
actualmente en uso es la 6.0.165. Todo esto último sí que depende de la distribución que se use. 
 
 
 
 
Un archivo de texto sin formato, también llamado de texto llano o de texto 
ascii, es aquel que no 
contiene mas que los 
caracteres mínimos necesarios y suficientes
 
para imprimir un texto en 
pantalla o en impresora. Por ejemplo, si escribimos la frase "hoy es lunes", sin las comillas dobles y 
sin pulsar INTRO, y la guardamos como u
n archivo de texto de nombre 
diasemana
, observaremos 
que este archivo contiene exactamente 12 bytes. Lo podemos comprobar haciendo: 
 
 
 
$ 
echo 
-
n "hoy es lunes" > diasemana
 
 
 
$ 
cat diasemana
 
(con este comando
 
se ven todos los bytes) 
 
 
$ 
ls 
-
l diasemana 
(
-
rw
-
r
--
r
--
 
1 root root 
12 
 
Mar 7 19:45 diasemana) 
 
 
 
 
Si mediante un procesador de texto, como el empleado para escribir estas líneas, abrimos el 
archivo anterior y resaltamos en 
negrita la palabra "hoy", en cursiva la palabra "es" y en subrayado 
la palabra "lunes" para que aparezca como "
hoy
 
es
 
lunes"
 
y después lo guardamos en disco, 
veremos que su tamaño es de: 
 
 
 
 
$ 
ls 
-
l diasemanaf.sxw
 
( 
-
rw
-
r
--
r
--
1 root ro
ot 
4902
 
Mar 7 19:57diasemanaf.sxw) 
 
 
 
 
 
 
No debe sorprendernos el hecho de que aparezcan 4902 bytes en un archivo que en origen tenía 
sólo 12 bytes. El aumento se debe a los 
caracteres añadidos por el procesador de texto
 
para dar 
tamaño y apariencia personalizada a los diferentes caracteres, en definitiva dar formato al texto. 
Queda aclarada, pues, la diferencia entre texto llano y texto con formato (y entre editor y 
procesador). 
 
 
 
INTRODUCCIÓN AL USO Y ADMINISTRACIÓN DEL SISTEMA 
OPERATIVO LINUX. EDITOR DE TEXTOS VI 
INTRODUCCIÓN. ¿QUÉ ES VI? 
 
 En cualquier sistema operativo existe siempre un editor de texto sin formato para crear o 
modificar archivos de configuración, programas fuente o programas interpretados. Unix tiene más 
de uno pero el más popular, ya que se ha convertido en un estándar que no falta en ninguna 
distribución de Linux, o de Unix, es el vi. Se puede encontrar en /usr/bin/vi como un archivo 
binario. Su nombre proviene de "visual" y su predecesor es ed un antiguo editor de líneas al estilo 
del edlin del DOS. Actualmente vi está reemplazado por /usr/bin/vim, de vi mejorado, pero se 
mantiene su nombre original mediante un enlace simbólico que apunta a vi. Otro enlace que 
apunta también al vi es el /usr/bin/view. Por tanto, si tecleamos vi, vim o view estamos abriendo el 
mismo editor. Sus archivos de configuración se encuentran en /usr/share/vim y la versión 
actualmente en uso es la 6.0.165. Todo esto último sí que depende de la distribución que se use. 
 
 Un archivo de texto sin formato, también llamado de texto llano o de texto ascii, es aquel que no 
contiene mas que los caracteres mínimos necesarios y suficientes para imprimir un texto en 
pantalla o en impresora. Por ejemplo, si escribimos la frase "hoy es lunes", sin las comillas dobles y 
sin pulsar INTRO, y la guardamos como un archivo de texto de nombre diasemana, observaremos 
que este archivo contiene exactamente 12 bytes. Lo podemos comprobar haciendo: 
 $ echo -n "hoy es lunes" > diasemana 
 $ cat diasemana (con este comando se ven todos los bytes) 
 $ ls -l diasemana (-rw-r--r-- 1 root root 12 Mar 7 19:45 diasemana) 
 
 Si mediante un procesador de texto, como el empleado para escribir estas líneas, abrimos el 
archivo anterior y resaltamos en negrita la palabra "hoy", en cursiva la palabra "es" y en subrayado 
la palabra "lunes" para que aparezca como "hoy es lunes" y después lo guardamos en disco, 
veremos que su tamaño es de: 
 
 $ ls -l diasemanaf.sxw ( -rw-r--r--1 root root 4902 Mar 7 19:57diasemanaf.sxw) 
 
 No debe sorprendernos el hecho de que aparezcan 4902 bytes en un archivo que en origen tenía 
sólo 12 bytes. El aumento se debe a los caracteres añadidos por el procesador de texto para dar 
tamaño y apariencia personalizada a los diferentes caracteres, en definitiva dar formato al texto. 
Queda aclarada, pues, la diferencia entre texto llano y texto con formato (y entre editor y 
procesador).