-->

Sustitución de Texto y Guardado en vi

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 vi o vim instalado.
  • 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 planeta con vi:
  • vi planeta
  • Pulsa la tecla i para entrar en modo edición y escribe estas líneas de ejemplo:
  • La tierra es un planeta y llamamos casa a la tierra
    En esta línea hablamos de la tierra otra vez
  • Pulsa Esc para volver al modo comando.

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:
  • :s/a/i/
  • Observa qué palabra ha cambiado y explica por qué solo se ha sustituido una ocurrencia.
  • Deshaz el cambio con:
  • u

Fase 3: Sustitución global en una línea

  • Con el cursor en la misma línea, ejecuta:
  • :s/e/*/g
  • Observa que ahora todas las letras e de esa línea se han sustituido, no solo la primera.
  • Deshaz el cambio con u.

Fase 4: Sustitución de una palabra completa en una línea

  • Ejecuta en la primera línea:
  • :s/tierra/marte/
  • Comprueba que solo se ha sustituido la primera aparición de la palabra tierra en esa línea.
  • Ejecuta ahora, añadiendo el indicador global:
  • :s/tierra/marte/g
  • Comprueba que ahora se han sustituido todas las apariciones de tierra en esa línea.
  • Deshaz los cambios con u las veces que sea necesario.

Fase 5: Sustitución en todo el documento

  • Ejecuta:
  • :%s/a/#/
  • Observa que se sustituye la primera letra a de cada línea del documento, no solo de la línea en la que estabas situado.
  • Deshaz el cambio con u.
  • Ejecuta ahora:
  • :%s/tierra/venus/g
  • Comprueba que todas las apariciones de tierra se han sustituido por venus en todas las líneas del documento.
  • Deshaz el cambio con u.

Fase 6: Guardar cambios sin salir

  • Pulsa i, añade una línea nueva con el texto que quieras y pulsa Esc.
  • Guarda los cambios sin salir del editor:
  • :w
  • 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.

Fase 7: Salir del editor

  • Intenta salir con:
  • :q
  • 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:
  • :q!
  • Abre de nuevo el fichero y comprueba que la última línea añadida no se ha guardado.

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:
  • :wq
  • Abre de nuevo el fichero, añade otra línea distinta y guarda y sal esta vez con:
  • :x
  • Comprueba que ambos comandos han guardado los cambios correctamente al volver a abrir el fichero.

Fase 9: Guardar el fichero con otro nombre

  • Con el fichero planeta abierto, ejecuta:
  • :w la-tierra
  • Sal del editor y lista el contenido del directorio con ls para comprobar que se ha creado el nuevo fichero la-tierra.
  • Abre este nuevo fichero con vi la-tierra y comprueba que contiene el mismo texto que tenía planeta en ese momento.

Preguntas de reflexión:

  1. ¿Qué diferencia existe entre el modo comando, el modo edición y el modo de línea de comandos (modo ex) en vi?
  2. ¿Qué hace exactamente el comando :s/a/i/ y sobre qué parte del texto actúa?
  3. ¿Qué función cumple el indicador g al final de un comando de sustitución?
  4. ¿Qué diferencia hay entre :s/tierra/marte/ y :%s/tierra/marte/?
  5. ¿Para qué sirve la letra u en modo comando?
  6. ¿Qué diferencia existe entre :w y :q?
  7. ¿Qué ocurre si ejecutas :q cuando el fichero tiene cambios sin guardar? ¿Cómo puedes forzar la salida sin guardarlos?
  8. ¿Qué hacen :wq y :x? ¿En qué se diferencian entre sí?
  9. ¿Qué ocurre cuando ejecutas :w seguido de un nombre distinto al del fichero que tenías abierto?
  10. ¿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:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Sustituye una única letra en la línea donde está el cursor (por ejemplo, la primera a por i).
    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:
  2. 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:
  3. 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:
  4. 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:
  5. Comprueba el comportamiento de :q con 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:
  6. Guarda y sal del editor utilizando :wq y, 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 de ls que confirma la creación del nuevo fichero:

    Explica la diferencia entre :wq y :x: