Logo comando vi

El editor de texto vi

 
 

En este artículo veremos como funciona el editor de texto vi.

Índice General

  1. Introducción
  2. Ejecutando el editor de texto vi por primera vez
  3. Modos del editor de texto vi
  4. Modo comando
  5. Modo edición
  6. Modo línea o ex
  7. Muy importante

 

  1. Introducción (Volver al índice General)
    vi es el editor de texto clásico de UNIX (se encuentra en todas sus versiones) y además en casi todas, por no decir todas, las versiones de GNU/Linux y BSD. La primera vez que lo utilizamos vemos que es un editor difícil de usar, no es nada intuitivo como pueden ser otros editores de texto para la interfaz de línea de comandos (CLI), pero como hemos dicho al comienzo de esta introducción, se encuentra presente en casi todas las versiones de UNIX/Linux.

    Es muy habitual acceder a dispositivos, como puede ser una NAS, cuyo sistema operativo es un Linux adaptado para dicho dispositivo y que no nos ofrece la posibilidad de instalar software, como podría ser un editor de texto más intuitivo. En esta situación, no nos queda otra opción para editar los archivos de texto que utilizar el editor de texto vi. Para superar situaciones similares, en este artículo veremos como se usa vi y de esta forma poder editar cualquier archivo de texto.

  2.  

  3. Ejecutando el editor de texto vi por primera vez (Volver al índice General)
    • El comando vi abre la ventana de edición sin abrir ningún archivo:
      $ vi
    • El comando vi nombre-de-archivo edita el archivo nombre-de-archivo si existe, de lo contrario, lo crea automáticamente:
      $ vi nombre-de-archivo

    Nota: Salvo que queramos crear o editar un archivo en el directorio actual, tendremos que indicar la ruta (path) donde se encuentra el archivo si existe, o la ruta al directorio donde queremos crear el archivo si este no existe.

    Al ejecutar vi desde la interfaz de línea de comandos (CLI), lo primero que vemos en la pantalla de edición son: el cursor resaltado, las líneas en blanco comienzan con el carácter ~ y en la parte inferior de la pantalla se encuentra la línea de estado, en la que se muestra el nombre del fichero, el número de líneas y el número de caracteres que contiene.

    Nota: Hasta que no guardemos el archivo, es decir, hasta que no tenga un nombre, no aparecerá la información indicada anteriormente en la línea de estado.

    Esto es una prueba de texto con vi
    ~                                                                  
    ~                                                                  
    ~                                                                  
    ~                                                                  
    ~                                                                  
    "prueba.txt" 1 lines, 35 characters written
  4.  

  5. Modos del editor de texto vi (Volver al índice General)
    Existen tres modos para trabajar con vi:

    • Modo comando: Este es el modo en el que se encuentra el editor cada vez que se inicia. Las teclas ejecutan comandos que realizan funciones específicas como mover el cursor, ejecutar comandos de edición de texto, salir del editor de texto vi, guardar cambios, etc.
    • Modo edición: En este modo podemos añadir texto. Existen varios comandos que nos permiten acceder a este modo.
    • Modo línea o ex: En este modo se escriben comandos en la última línea al final de la pantalla.

    Nota: El editor de texto vi como todo comando UNIX es sensible a las mayúsculas y a las minúsculas (case-sensitive). No es lo mismo el comando a que el comando A.

  6.  

  7. Modo comando (Volver al índice General)
    Algunos comandos constan de una o dos letras y un número opcional relacionado con distintas funciones. La mayoría de comandos en modo comando se ejecutan sin necesidad de pulsar la tecla Return (Intro) para que se ejecuten. A continuación veremos algunos comandos útiles para el manejo del editor.
     

    • Movernos con el cursor (Volver al índice General)
      Comandos de vi que nos permiten mover el cursor por la pantalla del editor.

      TeclasAcción
      Las teclas de flechasMover el cursor en la dirección de la flecha utilizada.
      hMover el cursor hacia la izquierda.
      lMover el cursor hacia la derecha.
      kMover el cursor arriba.
      jMover el cursor abajo.
      1GMover el cursor al comienzo del archivo.
      nGMover el cursor a una línea en concreto, donde n es el número de línea. Véase el apartado Conocer el número de cada línea.
      GMover el cursor al final del archivo.
      wMover el cursor una palabra a la derecha.
      bMover el cursor una palabra a la derecha.
      ^Moverse al comienzo de la línea actual.
      $Moverse al final de la línea actual.
      Return (Intro)Moverse al comienzo de la línea siguiente.
      HMoverse a la primera línea de la pantalla.
      LMoverse a la última línea de la pantalla.
      MMoverse a la mitad de la pantalla.
      Ctrl+FAvanzar una pantalla.
      Ctrl+DAvanzar media pantalla.
      Ctrl+BRetroceder una pantalla.
      Ctrl+URetroceder media pantalla
    •  

    • Cambio de modo comando a modo edición (Volver al índice General)
      Comandos de vi que nos permiten insertar texto y líneas en el archivo.

      TeclasAcción
      iInsertar texto a la izquierda del cursor.
      aInsertar texto a la derecha del cursor.
      IInsertar texto al comienzo de la línea donde se encuentra el cursor.
      AInsertar texto al final de la línea donde se encuentra el cursor.
      oInserta una línea debajo de la actual.
      OInserta una línea encima de la actual.
    •  

    • Cambiar texto (Volver al índice General)
      Comandos de vi que nos permiten sustituir una cadena de caracteres por otra del texto en edición.

      TeclasAcción
      s TEXTO EscSustituye el carácter bajo el cursor por TEXTO. Teclear s seguido del nuevo texto y pulsar Esc para terminar.
      r CARACTERReemplaza el carácter bajo el cursor por CARACTER. Pulsar r seguido de un único carácter. Al pulsar la tecla de CARACTER se regresa al modo comando.
      xpIntercambia los caracteres de la posición del cursor y el siguiente.
      cw PALABRA EscReemplaza una palabra completa por PALABRA. Situar el cursor al principio de la palabra a reemplazar, teclear cw seguido de la nueva palabra y pulsar Esc para terminar.
      También sirve para reemplazar parte de una palabra, solo hay que colocar el cursor sobre la palabra, a la derecha de la parte a reemplazar.
      ccReemplazar una línea completa. Al teclear cc desaparece la línea donde se encuentra el cursor dejando una línea en blanco para introducir el nuevo texto. Para terminar pulsar Esc.
      CReemplazar parte de una línea. Situar el cursor a la derecha de la parte a modificar, pulsar C, introducir la corrección y pulsar Esc para terminar.
      rPartir una línea. Mover el cursor al lugar de la línea donde se quiere partir y teclear r seguido de Return (Intro). Se sustituirá el carácter bajo el cursor por un retorno de carro sin afectar al texto.
      JUnir dos líneas. Colocar el cursor en la línea superior y se unirá al final de esta la línea siguiente.
    •  

    • Borrar texto (Volver al índice General)
      Comandos de vi que nos permiten borrar caracteres, palabras, parte de una palabra, parte de una línea y líneas en el archivo.

      TeclasAcción
      ddBorra la línea donde se encuentra el cursor.
      nddBorra n líneas consecutivas incluyendo la línea donde se encuentra el cursor.
      DBorra desde donde está el cursor hasta el final de la línea.
      d0Borra todo lo que está a la izquierda de la posición del cursor de una línea.
      xBorra el carácter donde se encuentra el cursor.
      XBorra el carácter anterior a la posición donde se encuentra el cursor.
      dwBorra desde donde se encuentra el cursor hasta el final de la palabra, incluido el carácter espacio si existe.
      dGBorra desde la línea actual hasta el final del archivo.
      d1GBorra desde el principio del archivo hasta la línea actual.
    •  

    • Deshacer cambios (Volver al índice General)
      Comandos de vi que nos permiten deshacer los cambios realizados antes de grabar el archivo en disco.

      TeclasAcción
      uDeshacer el comando previo.
      UDeshacer todos los cambios que se han hecho en una línea. Solo funciona si continuamos en dicha línea
      p o PDeshacer cambio realizado.

      Nota: Todo lo que se borra queda almacenado en un buffer. Si se borró algo por error, podemos recuperarlo si se hace antes de realizar otros cambios. Para recuperar el texto borrado, solo tenemos que ejecutar el comando p.

    •  

    • Cortar y pegar texto (Volver al índice General)
      Para cortar y pegar texto de un lugar a otro, seguiremos los siguientes pasos:

      1. Cortamos el texto que deseamos mover utilizando alguno de los comandos usados para borrar texto.
      2. Movemos el cursor, con alguno de los comandos utilizados para mover el cursor por el texto, hasta el lugar donde deseamos pegar el texto.
      3. Pegamos el texto con el comando p o P (comando put).
    •  

    • Copiar y pegar texto (Volver al índice General)
      Para copiar y pegar texto de un lugar a otro, utilizaremos los comandos yank y put. Para hacerlo, seguiremos los siguientes pasos:

      1. Movemos el cursor a la posición de la primera línea a copiar.
      2. Escribimos el número de líneas que queremos copiar.
      3. Tecleamos yy o Y (comando yank).
      4. Movemos el cursor hasta el lugar donde queremos pegar el texto.
      5. Pegamos el texto con el comando p o P (comando put).
    •  

    • Usar buffers con nombre (Volver al índice General)
      vi nos permite copiar texto a buffers y asignarles un nombre para poder luego, insertar dicho texto en cualquier parte del documento. Los buffers con nombre solo se mantienen en memoria mientras no se salga de vi o se le asigne un nuevo contenido a un mismo buffer.

      El procedimiento para dar nombre a un buffer es el siguiente:

      1. Nos situamos en la primera línea a copiar.
      2. Tecleamos comillas dobles(") seguido de la letra con que deseamos identificar el buffer. Por ejemplo, "a.
      3. Escribimos el número de líneas a copiar o cortar.
      4. Tecleamos yy o Y (comando yank) o dd (comando delete), dependiendo de si vamos a copiar o cortar el texto.
      5. Por ejemplo, para copiar:

        "a3yy

        o para cortar:

        "a3dd
      6. Nos situamos en la línea donde queremos copiar el texto.
      7. Tecleamos comillas dobles (") seguidas por la letra del buffer y por p o P (comando put).
      8. Por ejemplo:

        "ap

      Cada vez que queramos utilizar el texto guardado, solo tendremos que situarnos en la línea anterior donde deseamos pegar el texto y teclear comillas dobles (") seguidas por la letra del buffer y por p o P (comando put).

      Nota: Hay que tener en cuenta que el comando yy solo permite copiar líneas completas, no nos permite copiar bloques de texto.

  8.  

  9. Modo edición (Volver al índice General)
    vi siempre se inicia en modo comando, debido a esto, antes de poder escribir texto en el archivo se debe teclear alguno de los comandos de entrada de vi para acceder al modo edición, algunos de los comandos que nos permiten acceder al modo edición son:

    TeclasAcción
    i (insert)Activa el modo edición y permite insertar texto en la posición actual del cursor.
    a (append)Activa el modo edición y permite insertar texto después de la posición actual del cursor.
    Para regresar al modo comando, basta con presionar la tecla Esc. Si no recordamos en qué modo estamos, pulsando Esc nos aseguramos de que estamos en modo comando.
  10.  

  11. Modo línea o ex (Volver al índice General)
    Para ingresar al modo línea o ex desde el modo comando, utilizaremos alguna de las siguientes teclas: /, ? o :. Todas las órdenes que empiezan por /, ? o : requieren de pulsar la tecla Return (Intro) para que se ejecuten.

    Para volver al modo comando desde el modo línea, pulsaremos la tecla Return (Intro) al finalizar el comando o la tecla Esc que interrumpe el comando. A continuación veremos algunos comandos del modo línea:

       

    • Conocer el número de cada línea (Volver al índice General)
      Comandos de vi que nos permiten conocer el número de cada línea y que nos ayudarán a establecer un rango de líneas a mover, copiar o borrar.

      TeclasAcción
      :set nuActiva la visualización de los números de línea.
      :set nonuDesactiva la visualización de los números de línea.
    •  

    • Copiar, Mover y Borrar un rango de líneas (Volver al índice General)
      Comandos de vi que nos permitirán copiar, mover y borrar un rango de líneas. En todos los casos, los dos primeros números de línea especifican el rango de líneas a copiar, cortar o borrar, y el último número corresponde a la línea anterior al punto de inserción.

      La expresión #línea hace referencia al número de línea, es decir, solo es el número de línea. Por ejemplo, :2,4 co 6.

      TeclasAcción
      :#línea,#línea co #líneaCopiar un rango de líneas a la línea posterior a la indicada en la tercera aparición de #línea.
      :#línea,#línea m #líneaMover un rango de líneas a la línea posterior a la indicada en la tercera aparición de #línea.
      :#línea,#línea dElimina un rango de líneas.
      .Abreviatura que especifica la línea actual. Por ejemplo:
      :.,3 co 7
      $Abreviatura que especifica el final del archivo. Por ejemplo:
      :.,$ d
    •  

    • Buscar texto (Volver al índice General)
      Comandos de vi que nos permiten buscar cadenas de caracteres dentro del documento. Las búsquedas en vi son sensible a las mayúsculas y a las minúsculas (case-sensitive). Además, ciertos caracteres especiales (/ & . ^ * $ \ ?) tienen un significado especial en el proceso de búsqueda, y por lo tanto, cuando están incluidos en la cadena de caracteres a buscar hay que precederlos del carácter contrabarra (\).

      TeclasAcción
      :set icvi ignorará mayúsculas y minúsculas durante la búsqueda.
      :set noicvi es sensible a mayúsculas y minúsculas durante la búsqueda.
      /textoBusca hacia adelante la cadena de caracteres texto.
      ?textoBusca hacia detras la cadena de caracteres texto.
      /^textoBusca una línea que empieza por texto.
      /texto$Busca una línea que termina por texto.
      /\<textoBusca principio de palabra que comienza con texto.
      /texto\>Busca final de palabra que termina con texto.

      Nota: Una vez ejecutado el comando de búsqueda, pulsando el carácter n se va a la siguiente ocurrencia de texto, y pulsando el carácter N a la anterior ocurrencia.

    •  

    • Reemplazo de texto (Volver al índice General)
      El procedimiento para reemplazar una cadena de texto es similar al de búsqueda. Los caracteres especiales como los comodines, que veremos a continuación, o los caracteres ^, $, etc, también se pueden emplear para una busqueda-reemplazo.

      La orden básica para reemplazar una cadena de caracteres es la siguiente:

      :g/cadena-de-busqueda/s//cadena-de-reemplazo/g

      Para que vi pida confirmación antes de realizar el reemplazo, utilizaremos la siguiente orden:

      :gc/cadena-de-busqueda/s//cadena-de-reemplazo/g

      Responderemos y para o n no. Para finalizar el proceso de reemplazo, pulsaremos las teclas Ctrl+C.

    •  

    • Comodines (Volver al índice General)
      • El punto (.) en una cadena de caracteres equivale a cualquier carácter.
      • Para buscar caracteres alternativos en una cadena, se pondrán las alternativas entre corchetes, por ejemplo:
        • xxx encontraría las cadenas cxxx y fxxx.
        • [c-f]xxx encontraría todas las cadenas que comiencen por cualquier letra de la c a la f y sigan con xxx.
      • Para buscar cero ó más ocurrencias del último carácter escrito, añadiremos un asterisco (*) en la cadena.
    •  

    • Insertar un archivo (Volver al índice General)
      vi permite insertar un archivo dentro del documento que se está editando mediante la siguiente orden:

      :#línea r nombre-archivo

      #línea es el equivalente al número de línea dónde queremos que se inserte el archivo, es decir, es solo un número. Por ejemplo:

      :3 r ejemplo.txt

      Si el archivo a insertar no está en el directorio activo, habrá que especificar la ruta (path). Por ejemplo:

      :3 r /ruta/al/archivo/ejemplo.txt

      Si no se especifica el número de línea en #línea, se tomará la posición actual del cursor como lugar donde se insertará el archivo.

    •  

    • Salir del editor de texto vi, salvar, no salvar cambios, etc (Volver al índice General)
      Comandos de vi que nos permiten guardar los cambios, salir del editor salvando o no los cambios, etc.

      TeclasAcción
      :qSalir del editor si no hubo cambios.
      :q!Salir del editor sin guardar cambios.
      :wqGuardar cambios y salir del editor.
      :wGuardar cambios y seguir en el editor (si el archivo tiene nombre).
      :w archivoGuardar cambios en archivo (cuando el documento aún no tiene nombre).
  12.  

  13. Importante (Volver al índice General)
    Cuando editamos un archivo con vi, los cambios no se hacen directamente sobre el archivo, en realidad, se hacen en una copia del archivo que vi crea en un espacio de memoria temporal llamado buffer. La copia en disco del archivo se modifica sólo cuando se graban los contenidos del buffer.

    Esto tiene la ventaja de que podemos salir de la edición de un documento y descartar todos los cambios hechos durante una sesión, dejando la copia del disco intacta. Por otro lado, tiene la desventaja de que podemos perder el contenido no grabado del buffer si el sistema se cae. Lo más aconsejable, es guardar los cambios realizados en el archivo frecuentemente, especialmente si los cambios son importantes. Recordemos que para grabar el fichero que se está editando sin salir de vi solo tenemos que pulsar en modo comando la orden :w.

    • Recuperación ante una caída (Volver al índice General)
      Si el sistema cae, el contenido del buffer donde se realizan las modificaciones se puede perder. Podemos recuperar parte del trabajo realizado si invocamos vi desde la interfaz de línea de comandos (CLI) de la siguiente forma:

      $ vi -r nombre-archivo

      Donde nombre-archivo es el archivo que se estaba editando en el momento en que se produjo la caída.

editor de texto vi
 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
 
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.