Aprenda Linux, 101: Edición de archivos con vi

El editor siempre presente

Aprenda a usar el editor vi, presente en casi todos los sistemas UNIX® y Linux®. Use el material de este artículo para prepararse para el examen 101 de LPI y obtener la certificación de administrador de sistemas Linux o simplemente para ampliar sus conocimientos.

Ian Shields, Senior Programmer, IBM

Ian ShieldsIan Shields trabaja en múltiples proyectos Linux para la zona Linux dev developerWorks. Es Senior Programmer de IBM en el Research Triangle Park (RTP), Carolina del Norte. Ingresó a IBM en Canberra, Australia, como Systems Engineer en 1973, y desde entonces se dedica a sistemas de comunicaciones y computación ubicua en Montreal, Canadá, y en el RTP de Carolina del Norte. Es propietario de numerosas patentes y publicó diversos trabajos. Tiene una diplomatura en Matemática Pura y Filosofía de la Universidad Nacional de Australia. Es Máster y Doctor en Ciencias de la Computación de la Universidad Estatal de Carolina del Norte.


Nivel de autor contribuyente en developerWorks

12-04-2010

Acerca de esta serie

Con esta serie de artículos aprenderá a realizar tareas de administración de sistemas Linux. Además, puede usar el material proporcionado en este artículo para prepararse para los exámenes de certificación nivel 1 de Linux Professional Institute (LPIC-1).

Consulte la hoja de ruta de esta serie para ver una descripción de cada artículo de la serie con su respectivo vínculo. Esta hoja de ruta se encuentra en constante desarrollo y refleja los últimos objetivos (abril de 2009) de los exámenes LPIC-1; nos encontramos agregando nuevos artículos a la hoja de ruta a medida que los vamos terminando. Mientras tanto, puede usar versiones anteriores de materiales similares basados en objetivos LPIC-1 anteriores a abril de 2009 consultando nuestros tutoriales de preparación a exámenes de certificaciones de LPI.

Generalidades

Con este artículo, aprenda el uso básico del editor vi, el cual se encuentra disponible en casi todos los sistemas Linux o UNIX. Aprenda a:

  • Navegar dentro de un documento usando vi
  • Usar modos vi básicos
  • Insertar, editar, eliminar, copiar y buscar texto

Este artículo lo ayuda a preparar los Objetivos 103.8 del Tema 103 del examen 101 de Administración Nivel Junior de Linux Professional Institute (LPIC-1). Este objetivo tiene un valor de ponderación de 3 puntos.

Requisitos previos

Para aprovechar al máximo los artículos de esta serie, deberá contar con conocimientos básicos de Linux y con un sistema Linux en funcionamiento en el que pueda practicar los comandos explicados. Las distintas versiones de programas pueden representar los datos de salida en distintos formatos, por lo tanto, sus resultados podría diferir levemente de los listados y figuras aquí mostrados.


Navegación de documentos con vi

Conéctese con Ian

Ian es uno de nuestros autores más populares y prolíficos. Busque todos los artículos de Ian en developerWorks. Lea el perfil de Ian y conéctese con él, con otros autores y con lectores como usted en My developerWorks.

El editor vi se encuentra en casi todos los sistemas Linux y UNIX. De hecho, los sistemas que tienen sólo un editor, en general tienen vi, por lo cual vale la pena saber usarlo. Este artículo presenta algunos comandos de edición básica en vi. Si busca un tutorial completo sobre vi, consulte nuestro tutorial "vi intro -- the cheat sheet method", visite las páginas man o lea alguno de los excelentes libros que se encuentran disponibles.

Iniciar vi

La mayoría de las distribuciones de Linux tienen incluido el editor vim (V i IM proved o vi mejorado) en lugar del vi clásico. Vim es compatible con versiones posteriores de vi y cuenta con un modo gráfico (gvim) además de la interfaz de modo de texto estándar de vi. El comando vi suele ser un alias o vínculo simbólico al programa vim. Existen varias versiones de vim: tiny (mínima), small (pequeña), normal, big (grande) y huge (enorme). Averigüe la versión de vim que está ejecutando y las características que tiene incluidas usando el comando:

vi --version

Recordemos la sección de un artículo anterior "Learn Linux, 101: Process execution priorities" que hacía referencia al cambio de prioridades. Allí recomendamos cambiar la prioridad del shell script count1.sh en ejecución. Probablemente, cuando usted intentó seguir estas instrucciones, el comando se ejecutaba tan rápido que no le dio tiempo para efectuar el cambio de prioridad con renice. Entonces, comencemos usando el editor vi para agregar una línea al comienzo del archivo para que se mantenga en espera durante 20 segundos y nos dé tiempo de cambiar las prioridades.

Si aún no tiene el programa count1.sh, abra una ventana de terminal en su directorio principal y pegue los comandos del Listado 1. Esta acción creará count1.sh en un directorio llamado lpi103-8 y lo posicionará en el directorio.

Listado 1. CPU-intensive script - count1.sh

Haga clic para ver la lista de códigos

Listado 1. CPU-intensive script - count1.sh

mkdir -p lpi103-8 && cd lpi103-8 &&{echo 'x="$1"'>count1.shecho 'echo "$2" $(date)'>>count1.shecho 'while [ $x -gt 0 ]; do x=$(( x-1
       ));done'>>count1.shecho 'echo "$2" $(date)'>>count1.sh }

Para editar un archivo existente, use el comando vi con un nombre de archivo como parámetro. Consulte las páginas man o la sección de Recursos para obtener más información acerca de las distintas opciones disponibles. Por ahora, usaremos el comando sin opciones:
vi count1.sh
Se abrirá el archivo count1.sh. Verá una pantalla similar a la mostrada en el Listado 2. Si está usando vim, algunas palabras o caracteres podrían aparecer en colores. Vim ofrece un modo de resaltado de sintaxis (que no posee el editor vi original), el cual podría estar activado predeterminadamente en su sistema.

Listado 2. Edición de count1.sh usando vi
x="$1" echo "$2" $(date) while [ $x -gt 0 ]; do x=$(( x-1
));done echo "$2" $(date) ~ ~ ~ ~ "count1.sh" 4L, 84C 1,1 All

El editor vi fue creado cuando no todos los teclados de terminal tenían teclas de movimiento de cursor, por consiguiente, todas las tareas que pueden realizarse en vi, también pueden llevarse a cabo con las teclas alfanuméricas tradicionales y otras pocas teclas como Esc e Insert. Sin embargo, si lo desea, puede configurar vi para usar teclas adicionales; la mayoría de las teclas tienen funciones útiles en vi. Debido a sus orígenes y al hecho de que las primeras conexiones de terminales eran lentas, vi se destacó por el uso de comandos muy breves y crípticos. Veamos primero las teclas que se usan para navegar dentro de un archivo.

Navegación general

Use los siguientes comandos para desplazarse dentro de un archivo:

h
Desplazarse un carácter hacia la izquierda en la línea actual
j
Pasar a la línea siguiente
k
Pasar a la línea anterior
l
Desplazarse un carácter hacia la derecha en la línea actual
w
Pasar a la palabra siguiente en la línea actual
e
Pasar al siguiente fin de palabra en la línea actual
b
Pasar al anterior inicio de palabra en la línea actual
Ctrl-f
Pasar a la página siguiente
Ctrl-b
Pasar a la página anterior

Si tipea un número antes de cualquiera de estos comandos, el comando se ejecutará las veces que indique ese número. Este número se denomina conteo de repetición o simplemente conteo. Por ejemplo, el comando 5h moverá el cursor cinco caracteres hacia la izquierda. Muchos comandos vi admiten el conteo de repeticiones.

Navegación a líneas específicas

Use los siguientes comandos para desplazarse a líneas específicas dentro de un archivo:

G
Desplazarse a una línea específica dentro del archivo. Por ejemplo, el comando 3G lo ubicará en la línea 3. Sin ningún parámetro, G lo ubica en la última línea del archivo.
H
Desplazarse en relación a la línea superior de la pantalla. Por ejemplo, el comando 3H lo ubicará en la tercera línea actual de la pantalla.
L
Igual a H, pero en relación a la última línea de la pantalla. Por lo tanto, el comando 2L lo ubicará en la antepenúltima línea de la pantalla.

Practique estos comandos hasta que logre desplazarse cómodamente dentro del archivo. Si tiene algún problema o no logra avanzar, continúe leyendo y aprenda a salir del archivo.

Salir de vi

Cuando comenzamos a trabajar con un editor nuevo, es fundamental saber salir antes de cometer un error, como dañar un archivo de configuración importante. Las opciones para salir de vi son las siguientes: salir guardando o cancelando los cambios, o reiniciar desde el comienzo. Si estos comandos no funcionan en su sistema, es probable que esté trabajando en modo insertar. Hablaremos de esto a continuación. Ante la duda, presione Esc para salir del modo insertar y volver al modo de comandos, en el cual podrá usar los comandos.

:q!
Dejar de editar el archivo y cancelar todos los cambios. Esta expresión se utiliza con frecuencia cuando nos arrepentimos de los cambios realizados.
:w!
Escribir el archivo (modificado o no). Intenta sobrescribir archivos existentes o archivos de sólo lectura u otros archivos no editables. Si tipea un nombre de archivo como parámetro, se escribirá el archivo nombrado en lugar del archivo con el que comenzó a trabajar. En general, se recomienda no usar ! a menos que esté realmente seguro de lo que está haciendo.
ZZ
Escribir el archivo sólo si se han realizado modificaciones, luego salir. Esta expresión se utiliza con frecuencia para salir de vi de forma normal.
:e!
Editar la copia de disco actual del archivo. El archivo se volverá a cargar y todos los cambios realizados se cancelarán. También puede usar esta función si la copia de disco ha cambiado por cualquier motivo y usted quiere trabajar sobre la última versión.
:!
Ejecute un comando shell. Tipee el comando y presione Enter. Cuando el comando finalice, verá los datos de salida y un aviso para volver al editor vi.

Notas:

  1. Al tipear los dos puntos (:), el cursor se desplazará a la última línea de la pantalla para permitirle tipear un comando con sus respectivos parámetros.
  2. Si omite el signo de exclamación en los comandos antes mencionados, es posible que obtenga un mensaje de error que indique que los cambios no se guardaron o que el archivo de salida no es editable (por ejemplo, si usted está editando un archivo de sólo lectura).
  3. Los comandos : también pueden usarse en formato no abreviado (:quit, :write, :edit), pero esto es poco frecuente.

Modos vi

El editor vi tiene dos modos de operación:

Modo de comandos
En el modo de comandos, podemos desplazarnos dentro de un archivo y efectuar operaciones de edición como buscar texto, eliminar texto, modificar texto, etc. vi suele iniciarse en modo de comandos.
Modo insertar
En el modo insertar, podemos tipear texto nuevo en el punto de inserción de un archivo. Para volver al modo de comandos, presione la teclaEsc(Escape).

Estos dos modos determinan la forma de comportamiento del editor. Todo lo que se tipee en el modo insertar se considerará como texto a insertar en el archivo. Si intenta tipear un comando y no sucede nada o el carácter aparece debajo del cursor, seguramente olvidó presionar Esc para salir del modo insertar.


Edición de texto

Ahora que ya sabemos cómo abrir un archivo en vi, desplazarnos dentro de éste y salir, llegó el momento de aprender a editar el texto dentro del archivo.

Modificar texto

Use los siguientes comandos para insertar, eliminar o modificar texto. Tome en cuenta que algunos de estos comandos poseen una forma en mayúscula que es similar a la forma en minúscula; lea las descripciones proporcionadas a continuación.

i
Ingrese al modo insertar antes del carácter en la posición actual. Tipee el texto deseado y presione Esc para volver al modo de comandos. Use I para insertar texto al comienzo de la línea actual.
a
Ingrese al modo insertar antes del carácter en la posición actual. Tipee el texto deseado y presione Esc para volver al modo de comandos. Use A para insertar texto al final de la línea actual.
c
Use c para modificar el carácter actual e ingrese al modo insertar para tipear caracteres de reemplazo.
o
Abra una línea nueva para insertar texto debajo de la línea actual. Use O para abrir una línea arriba de la línea actual.
cw
Elimine el resto de la palabra actual e ingrese al modo insertar para reemplazarla. Use un conteo de repetición para reemplazar varias palabras. Use c$ para reemplazar hasta el final de la línea.
dw
Igual a cw y c$, con la excepción de que no se ingresa al modo insertar.
dd
Elimine la línea actual. Use un conteo de repetición para eliminar varias líneas.
x
Elimine el carácter en la posición del cursor. Use un conteo de repetición para eliminar varios caracteres.
p
Coloque el último texto eliminado después del carácter actual. Use P para colocarlo antes del carácter actual.
xp
Esta combinación de x y p es una expresión muy útil que intercambia lugares entre el carácter en la posición del cursor y el que tiene a la derecha.

Búsqueda de texto

Busque texto en el archivo usando expresiones regulares:

/
Use / seguido de una expresión regular para buscar hacia delante en el archivo.
?
Use ? seguido de una expresión regular para buscar hacia atrás en el archivo.
n
Use n para repetir la última búsqueda en cualquier dirección.

Puede anteponer a cualquiera de los comandos de búsqueda un número que indique un conteo de repetición. Entonces, el comando 3/x buscará la tercera aparición de x a partir del punto actual, al igual que el comando /x seguido de 2n. De la misma manera, el comando 2/^e buscará la segunda línea a partir de la posición actual que empiece con e.

Tome en cuenta que la búsqueda se ubicará en la parte superior del archivo luego de haberlo recorrido hasta el final.

Ayuda

Otro comando útil de vi es help, el cual se invoca tipeando :help. La ayuda se abrirá dentro de vi; use el comando :q para salir de la ayuda y volver a trabajar. Si desea obtener ayuda acerca de un tema en particular como, por ejemplo, ajuste (wrap) de líneas, agregue una palabra a continuación del comando :help, por ejemplo: :help wrap.

Aplicación de los conocimientos adquiridos

Este artículo comenzó con la idea de agregar una línea en el archivo count1.sh. Para conservar el original y guardar la versión modificada con el nombre count2.sh, usaremos los siguientes comandos vi. Primero debemos abrir el archivo con el comando vi. Cuando aparece <Esc>, significa que debemos presionar la tecla Esc.

Listado 3. Comandos del editor para agregar una línea a count1.sh
1GOsleep 20<Esc>:w! count2.sh:q

A continuación se detalla la función de cada comando:

1G
Moverse a la primera línea del archivo
O
Abrir una línea nueva arriba de la primera línea e ingresar al modo insertar
sleep 20
Texto nuevo a agregar
<Esc>
Presionar la teclaEscpara volver a modo de comandos
:w! count2.sh
Escribir el archivo en el disco
:q
Cerrar vi

¡Es simple cuando sabemos cómo hacerlo!

Este es el último artículo correspondiente al Examen 101 - Tema 103: comandos GNU y UNIX. Consulte la hoja de ruta de esta serie para ver una descripción de cada artículo de la serie con su respectivo vínculo.

Recursos

Aprender

Obtener los productos y tecnologías

  • Con el software de prueba de IBM, disponible para su descarga directa desde developerWorks, construya su próximo proyecto de desarrollo en Linux.

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=482423
ArticleTitle=Aprenda Linux, 101: Edición de archivos con vi
publish-date=04122010