Objetivo:
Aprender a utilizar el editor vi (o vim) para buscar y sustituir caracteres, palabras y líneas de texto mediante el modo de línea de comandos (modo ex), así como aprender a guardar los cambios realizados, salir del editor sin guardar y guardar un fichero con un nombre distinto.
Escenario:
- Herramientas: Terminal de Linux con el editor
vioviminstalado. - Conceptos clave: modo comando, modo edición, modo de línea de comandos (modo ex), sustitución de texto, alcance de una sustitución (línea o documento completo), comando global, deshacer cambios, guardar, salir y guardar con otro nombre.
Instrucciones:
Fase 1: Preparación del fichero de trabajo
- Abre una terminal y crea un nuevo fichero llamado
planetaconvi: - Pulsa la tecla
ipara entrar en modo edición y escribe estas líneas de ejemplo: - Pulsa
Escpara volver al modo comando.
vi planeta
La tierra es un planeta y llamamos casa a la tierra En esta línea hablamos de la tierra otra vez
Fase 2: Sustitución de un único carácter en una línea
- Sitúa el cursor en la primera línea, escribe dos puntos para entrar en modo de línea de comandos y ejecuta:
- Observa qué palabra ha cambiado y explica por qué solo se ha sustituido una ocurrencia.
- Deshaz el cambio con:
:s/a/i/
u
Fase 3: Sustitución global en una línea
- Con el cursor en la misma línea, ejecuta:
- Observa que ahora todas las letras
ede esa línea se han sustituido, no solo la primera. - Deshaz el cambio con
u.
:s/e/*/g
Fase 4: Sustitución de una palabra completa en una línea
- Ejecuta en la primera línea:
- Comprueba que solo se ha sustituido la primera aparición de la palabra
tierraen esa línea. - Ejecuta ahora, añadiendo el indicador global:
- Comprueba que ahora se han sustituido todas las apariciones de
tierraen esa línea. - Deshaz los cambios con
ulas veces que sea necesario.
:s/tierra/marte/
:s/tierra/marte/g
Fase 5: Sustitución en todo el documento
- Ejecuta:
- Observa que se sustituye la primera letra
ade cada línea del documento, no solo de la línea en la que estabas situado. - Deshaz el cambio con
u. - Ejecuta ahora:
- Comprueba que todas las apariciones de
tierrase han sustituido porvenusen todas las líneas del documento. - Deshaz el cambio con
u.
:%s/a/#/
:%s/tierra/venus/g
Fase 6: Guardar cambios sin salir
- Pulsa
i, añade una línea nueva con el texto que quieras y pulsaEsc. - Guarda los cambios sin salir del editor:
- Observa el mensaje que aparece en la parte inferior con el nombre del fichero, el número de líneas y el tamaño guardado.
:w
Fase 7: Salir del editor
- Intenta salir con:
- Comprueba que, al no tener cambios pendientes, se sale sin ningún aviso.
- Vuelve a abrir el fichero, añade una línea nueva sin guardarla y prueba a salir de nuevo con
:q. Observa el aviso que muestra Vim. - Sal sin guardar los cambios pendientes con:
- Abre de nuevo el fichero y comprueba que la última línea añadida no se ha guardado.
:q
:q!
Fase 8: Guardar y salir en un solo paso
- Añade una línea nueva en modo edición y pulsa
Esc. - Guarda y sal en un único comando:
- Abre de nuevo el fichero, añade otra línea distinta y guarda y sal esta vez con:
- Comprueba que ambos comandos han guardado los cambios correctamente al volver a abrir el fichero.
:wq
:x
Fase 9: Guardar el fichero con otro nombre
- Con el fichero
planetaabierto, ejecuta: - Sal del editor y lista el contenido del directorio con
lspara comprobar que se ha creado el nuevo ficherola-tierra. - Abre este nuevo fichero con
vi la-tierray comprueba que contiene el mismo texto que teníaplanetaen ese momento.
:w la-tierra
Preguntas de reflexión:
- ¿Qué diferencia existe entre el modo comando, el modo edición y el modo de línea de comandos (modo ex) en
vi? - ¿Qué hace exactamente el comando
:s/a/i/y sobre qué parte del texto actúa? - ¿Qué función cumple el indicador
gal final de un comando de sustitución? - ¿Qué diferencia hay entre
:s/tierra/marte/y:%s/tierra/marte/? - ¿Para qué sirve la letra
uen modo comando? - ¿Qué diferencia existe entre
:wy:q? - ¿Qué ocurre si ejecutas
:qcuando el fichero tiene cambios sin guardar? ¿Cómo puedes forzar la salida sin guardarlos? - ¿Qué hacen
:wqy:x? ¿En qué se diferencian entre sí? - ¿Qué ocurre cuando ejecutas
:wseguido de un nombre distinto al del fichero que tenías abierto? - ¿Por qué es importante distinguir entre modificar el texto en el editor y guardar realmente esos cambios en el fichero?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Qué diferencia existe entre el modo comando, el modo edición y el modo de línea de comandos?
El modo comando permite desplazarse y ejecutar acciones sobre el texto sin escribir directamente en él. El modo edición, al que se accede por ejemplo con i, permite escribir y modificar el contenido del fichero. El modo de línea de comandos, al que se accede escribiendo dos puntos desde el modo comando, permite introducir instrucciones como sustituciones, guardado o salida.
2. ¿Qué hace exactamente el comando :s/a/i/?
Busca la primera aparición de la letra a en la línea donde está situado el cursor y la sustituye por la letra i. Solo afecta a esa línea y solo a la primera coincidencia.
3. ¿Qué función cumple el indicador g?
El indicador g (global) hace que la sustitución se aplique a todas las coincidencias dentro del ámbito indicado, en lugar de detenerse en la primera que encuentra.
4. ¿Qué diferencia hay entre :s/tierra/marte/ y :%s/tierra/marte/?
El primero sustituye la palabra solo en la línea donde está el cursor. El símbolo % antes de la s amplía el alcance de la sustitución a todo el documento, no solo a la línea actual.
5. ¿Para qué sirve la letra u?
Deshace el último cambio realizado en el documento, devolviendo el texto al estado anterior.
6. ¿Qué diferencia existe entre :w y :q?
:w guarda los cambios realizados en el fichero sin salir del editor. :q cierra el editor, pero solo lo permite si no hay cambios pendientes de guardar.
7. ¿Qué ocurre si ejecutas :q con cambios sin guardar?
Vim muestra un aviso indicando que hay cambios sin guardar y no permite salir. Para forzar la salida descartando esos cambios se utiliza :q!.
8. ¿Qué hacen :wq y :x?
Ambos guardan los cambios y salen del editor en una sola instrucción. :x es equivalente a :wq, aunque solo escribe el fichero si realmente se han producido cambios, y es el comando más utilizado habitualmente por los administradores de Linux.
9. ¿Qué ocurre al ejecutar :w seguido de un nombre distinto?
Se crea un nuevo fichero con ese nombre que contiene el contenido actual del documento, mientras que el fichero original permanece con el contenido que tenía guardado hasta ese momento.
10. ¿Por qué es importante distinguir entre modificar el texto y guardarlo?
Porque, igual que en otros editores, los cambios realizados en el editor solo existen en memoria hasta que se ejecuta una instrucción de guardado; si se sale sin guardar, esos cambios se pierden y el fichero conserva su contenido anterior.
Ficha de Laboratorio: Sustitución de Texto y Guardado en vi
Instrucciones de entrega:
- Rellena los campos y responde en este formulario desde tu navegador.
- Pulsa el botón de imprimir al final de la página.
- Selecciona "Guardar como PDF" en el diálogo de impresión.
- Entrega el archivo PDF en el aula virtual.
Alumno/a: Fecha:
Grupo:
Completa la ficha realizando las siguientes actividades:
- Sustituye una única letra en la línea donde está el cursor (por ejemplo, la primera
apori).
Escribe el comando utilizado:
Copia aquí el estado de la línea antes y después del cambio:
Explica por qué solo se ha sustituido una letra:
- Sustituye todas las apariciones de una letra en una única línea usando el indicador global.
Escribe el comando utilizado:
Copia aquí el resultado obtenido en la línea:
Explica qué diferencia observas respecto al ejercicio anterior:
- Sustituye una palabra completa en una línea, primero sin el indicador global y después con él.
Escribe el comando sin indicador global:
Escribe el comando con el indicador global:
Copia aquí el resultado obtenido en ambos casos:
Explica la diferencia entre ambos resultados:
- Realiza una sustitución sobre todo el documento, primero de un carácter y después de una palabra con indicador global.
Escribe el comando utilizado para el carácter:
Escribe el comando utilizado para la palabra:
Copia aquí el resultado obtenido en el documento:
Explica qué papel cumple el símbolo%en estos comandos:
- Comprueba el comportamiento de
:qcon y sin cambios pendientes, y utiliza:q!para descartarlos.
Escribe el comando que muestra el aviso de cambios sin guardar:
Escribe el comando utilizado para salir descartando los cambios:
Indica qué mensaje ha mostrado Vim:
Explica para qué sirve este mecanismo de aviso:
- Guarda y sal del editor utilizando
:wqy, en otra ocasión, utilizando:x. Guarda además el fichero con un nombre distinto usando:w.
Escribe el comando utilizado con:wq:
Escribe el comando utilizado con:x:
Escribe el comando utilizado para guardar con otro nombre:
Copia aquí la salida delsque confirma la creación del nuevo fichero:
Explica la diferencia entre:wqy:x: