You are on page 1of 11

El editor VI

Introducción al editor de textos más usado en UNIX

Introducción Comandos e introducción de texto Entrada al editor vi Primeros comandos Otros comandos para pasar al modo edición Borrar y copiar Rangos de líneas Búsqueda y sustitución Otras posibilidades Introducción
Se aconseja la lectura previa del documento Manejo de terminales en UNIX para mejor entender el funcionamiento del vi. Es un EDITOR, no un PROCESADOR DE TEXTOS. Está hecho para escribir y modificar ficheros de texto sencillos, programas, etc. No permite justificar párrafos, utilizar distintos tipos de letra, escribir a varias columnas, insertar gráficos, etc. No hay ningún programa de estas características que se proporcione con UNIX. Normalmente, es necesario adquirirlos por separado. El editor vi es el más utilizado en ordenadores que utilizen el sistema operativo UNIX. Los usuarios no informáticos lo consideran demasidao complicado, sobre todo acostumbrados a los editores del sistema operativo DOS. Por eso se tiende a considerarlo muy atrasado, sin embargo es realmente potente. Su dificultad de manejo se justifica por las características de los terminales que había cuando fue diseñado y

A base de utilizar sólo comandos compuestos por la tecla Ctrl y otra letra alfabética. Claro.. tengo sólo 26 posibilidades (a. entre los cuales el usuario debe alternar continuamente durante una sesión de edición: Modo edición Todo lo que escribo. si se desea). Por ejemplo. si dejo pulsada la tecla Ctrl mientras pulso f. la tecla F10 para grabar el fichero que :w. Si no puedo usar las teclas de función ni otras especiales (por incompatibilidad entre fabricantes). esto es a costa de su sencillez de manejo. como es habitual en todos los editores. como las de movimiento del cursor o las de función (aunque en la mayoría de los terminales. aparece en pantalla. Por eso el vi tiene dos modos de funcionamiento. Comandos e introducción de texto Por tanto. por ejemplo. Modo comando . por tanto no hay problema de incompatibilidad entre fabricantes.porque un objetivo primordial de su diseñador fue que pudiera ser utilizado en casi cualquier tipo de terminal por lo que no requiere el uso de teclas especiales. esto no parece lógico. Usando comandos compuestos de teclas normales Estos ultimos requieren una explicación. ¿cómo puedo accder a las muchas funciones que tiene el editor? Pues mediante teclas normales. Hay que hacer notar que esto es posible porque todos los terminales generan el mismo código numérico al pulsar Ctrl junto con una letra. aparecerá en la pantalla tal como lo escribo. las teclas de flechas sí se pueden utilizar. Pero si me dicen que el símbolo $ significa ir al final de la línea. queda claro que no se pueden usar las teclas de función. etc) se accede de dos formas posibles: Usando la tecla Ctrl Pulsar esa tecla (también llamada Control) junto con otra tecla alfabética. borrar líneas. Es más sencillo para un usuario pulsar.. En el vi a muchas funciones (como grabar fichero. porque si pulso ese carácter. avanzaré una página en mi documento.z) ya que Ctrl-a genera el mismo código que Ctrl-A (aquí no hay diferencia entre minúsculas y mayúsculas).

iremos (en el modo comando) al lugar donde deseamos empezar a escribir y pulsaremos una de las teclas que nos pasan al MODO EDICION. Entrada al editor vi Si estamos en un terminal trabajando con un ordenador central que funcione con el sistema operativo UNIX (en cualquiera de sus muchas variantes). Podemos usar aquí cualquiera de los comandos que veremos más adelante aplicables en este modo (y que están resumidos al final de este documento).a. Véase Manejo de terminales en UNIX para saber cómo solucionarlo. quedan todas las líneas de la pantalla vacías pero con una tilde (~) al principio. En cuanto terminemos de escribir. En ese momento. $ mueve el cursor hasta el final de la línea. llamada también escape). Si no ocurre de esta forma y la pantalla queda desencajada. todo lo que escribamos aparecerá en la pantalla. iremos a esa parte en este modo y en ahí pasaremos de nuevo al modo edición.o.A. si el fichero ya existía previemente.O (y alguna otra). estamos en el MODO COMANDO. Si no existía. debemos pulsar ESC para ir al modo comando. las teclas tienen un significado especial. nada más entrar en el vi. Con esa tilde representa el vi las líneas que están vacías. :q es para salir del editor. el problema puede estar relacionado con la variable TERM. Del modo comando se pasa al modo edición con alguna de las siguientes teclas:i. Si queremos escribir algo en el fichero. Del modo edición se pasa al modo comando usando la tecla ESC. se borra la pantalla y.Lo que escribo estando en este modo (al cual se accede pulsando la tecla ESC. Por ejemplo. usaremos el programa vi para editar un fichero con el siguiente comando: vi fichero Tras ejecutar ese comando. pues así las modificaciones no deseadas en el texto son menores. Hay que tener presente que al entrar en el editor vi. Primeros comandos . aparece su contenido. :w graba el fichero. Una cosa que hay que tener en cuenta en el manejo del vi es que conviene estar el máximo tiempo posible en el modo COMANDO.I. el modo inicial es el MODO COMANDO. Como dijimos antes. j lo mueve una línea hacia abajo. Si queremos editar en otra parte del fichero.

o Backspace) para eliminar la última letra escrita. La forma más habitual de hacer esto es con el comando i. borraremos las letras anteriores. no vemos ningún cambio en la pantalla. Algunos de los comandos que usaremos para estas operaciones (todos ellos se utilizan en MODO COMANDO) son (atención a la diferencia entre mayúsculas y minúsculas): Pasar a modo EDICION (ya se ha explicado) h Desplaza el cursor una posición a la izquierda j Idem a la línea inferior k Idem a la línea superior l Idem una posición a la derecha ^f Desplaza el cursor una pántalla hacia adelante (unas 24 líneas) ^b Idem hacia atrás Nos informa del nombre del fichero que estamos editando. y del número total de líneas del fichero. Comenzamos ahora a escribir y el texto va apareciendo en la pantalla. Si nos equivocamos en una letra. Si seguimos pulsando la tecla. Al pulsar esa letra. no ocurre nada. pero el modo a cambiado al de EDICION. la tecla de borrado no me sirve para borrar lo que escribí antes. Estamos en modo comando. Si vamos a llamar a este con el nombre primero. Si escribimos más letras de las que caben en el ancho de la misma (normalmente 80 caracteres). continuarán por la línea siguiente. x Borra el carácter sobre el que está el cursor dd Borra la línea sobre la que está el cursor ^ Desplaza el cursor al principio de la línea actual $ Idem al final de la línea :w! Graba el fichero (y seguimos dentro del vi) :q! Salir del editor.Antes que nada. podemos usar la tecla de borrado (normalmente tiene la inscripción <. ejecutamos desde UNIX: vi primero Al pulsar la tecla INTRO aparece la pantalla vacía con una tilde al principio de cada línea. Pero sólo podemos borrar así las últimas que hayamos escrito. del número de la línea en la que ^g estamos. Si escribimos un texto. tendremos que empezar a escribir algo en un fichero. por lo que para comenzar a escribir hay que pasar al modo edición. luego pasamos al modo comando para hacer algo. G Ir al final del fichero. y luego otra vez al modo edición. Habrá que moverse al sitio donde quiero borrar y usar el comando para ello. 1G Ir al principio del fichero. grabando previamente el fichero i . sin grabarlo previamente :wq! Salir del editor.

En la mayoría de terminales. Se podría hacer lo siguiente: • Situar el cursor al principio de la primera línea . Si pulsamo i. Si ahora pulsamos i y escribimos un texo. sino AÑADIR. ¿Cómo podemos hacerlo?. el número indica a qué línea del fichero queremos ir. Cuando ocurre esto. permitiéndonos escribir ahí. Así. Para ello se usa el comando a. En segundo lugar. j. recordemos. Una sóla G indica ir a la última línea. Los comandos que se ejecutan en modo comando no aparecen por pantalla. Este es el caso de tener que añadir texto al final de una línea. Casi todos los comandos pueden llevar un número delante. Lo que queremos en este caso no es INSERTAR. si dd significa borrar una línea. l. k. lo que escribamos se añade justo donde está el cursor. debemos usar otro comando. éste se insertará entra la h y la a. insertamos texto en la línea actual. encima de la o. En la mayoría de los comandos. a excepción de los que empiezan por /. usaremos la nomenclatura ^f para indicar que se mantiene pulsada la tecla Ctrl mientras pulsamos f. A veces. se pueden usar las teclas de flechas en lugar de h. el cursor no pasará más allá de la última a (nunca se puede mover el cursor después del último carácter de una línea). 20G es ir a la línea 20. el cursor -que estaba. Si tenemos una línea tal como la siguiente: En un lugar de la Mancha Si nos desplazamos al final para añadir lo que falta. 1G significa ir a la línea 1. Así. Otro caso que se puede presentar es la nedesidad de escribir texto ANTES de la primera línea.? o : Otros comandos para pasar al modo edición Ya hemos mencionado que para entrar en el modo edición se usa el comando i (de insertar). el comando 1G es especial porque lleva un número al comienzo. se considera como si dijéramos ejecuta el comando G con el argumento 1. 5ddsignifica borrar 5 líneas (la actual y las cuatro siguientes). En el caso del comando G. Hay que aclarar dos cosas en esta lista: En primer lugar. Al introducirlo. Al pulsarlo.se sitúa después de esta letra. un número precediendo al comando significa ejecuta n veces este comando.

falta el segundo verso. 2. una línea nueva y deja el cursor al principio de la misma. vamos a indicar tres formas de hacerlo (suponemos que estamos en modo comando): Forma 1 1. Ya podemos escribir Forma 2 1. Esto inserta un salto de línea. Este comando es O (o mayúscula).• • • • • Pulsar i para insertar Pulsar INTRO para insertar una línea en blanco Pulsar ESC para pasar al modo comando Pulsar k (o flecha arriba) para subir a la línea anterior Pulsar i para insertar Ya hemos abierto una línea y podemos escribir. No cruza el mar sino vuela. Evidentemente. Ir a la primera línea. Pulsar INTRO. La usaremos por ejemplo para añadi líneas al final del fichero. Resumimos los comandos para pasar al modo edición (hay alguno más pero estos son los más habituales): Insertar texo delante de donde está el cursor Añadir texto a continuación de donde está el cursor O Abrir una línea antes de la actual y editar en ella o Abrir una línea después de la actual y editar en ella i a Practiquemos con un ejemplo. Para evitar esa secuencia tan tediosa. Si queremos escribirlo ahora. Ir al final de ella (con $ o pulsando l hasta llegar al final) 3. o sea. hay otro comando significa abrir una línea antes de la que está el cursor y pasar en ella al modo edición. Ir a la primera línea . Pulsando INTRO podemos abrir más líneas si queremos. Tenemos el texto: Con diez cañones por banda. un velero bergantín. Pulsar a para añadir 4. Un comando relacionado es o (o minúscula) que significa abrir una línea después de la actual y pasar en ella al modo edición.

J Une. Para ello. Ya podemos escribir. 3Y Marca tres líneas (la actual y las dos siguientes). situamos el cursor en la primera línea (se supone que estamos en modo comando. d$ Borra desde el cursor hasta el final de la línea. :1. No cruza el mar sino vuela. Damos aquí una lista más amplia: Borra el carácter sobre el que está el cursor. Y Por ejemplo. Esto inserta una línea debajo y pone el cursor en ella. :1. viento an popa a toda vela. Hay varia formas de marcar el texto que queremos copiar. :. para . x Para copiar texto de un sitio del fichero a otro. un velero bergantin.$d Borra las líneas desde la número 10 hasta la última. Ya podemos escribir.$y Marca desde la línea actual hasta el final.y Marca desde la primera línea hasta la actual. Forma 3 1. Ya mencionamos en el apartado 3 algunos comandos para borrar. la siguiente (borra la separación entre ambas). las operaciones de borrado y copiado de texto son muy importantes. y dar la orden de copia.10d Borra las líneas 1 a la 10. Borrar y copiar En cualquier editor. :. Esta orden de copia es el comando p. :10. Esto inserta una línea encima de la actual y pone el cursor en ella.$d Borra las líneas comprendidas entre la actual y la última. primero hay que marcar el texto que vamos a copiar. luego ir al sitio donde queremos copiarlo. al final de la línea actual. Por ejemplo: Marca la línea actual. 2. si tenemos el texto: Con diez cañones por banda.Pulsa o. Ir a la segunda línea 2. Pulsar O. pues se usan muy a menudo. Queremos copiar las dos primeras líneas al final del texto. dd Borra la línea en la que está el cursor.

d :1. a la última.? podemos aplicar un rango de líneas a las que queremos aplicar el comando. en vez de escribi siempre el comando.10d Borra las 10 primeras líneas :1. Ese rango puede ser o un número de línea o un par de ellas separadas por coma.$d Borra desde la línea actual al final :1.$d El comando :d también sive para borrar líneas.exrc de nuestro directorio actual.asegurarnos. la actual y a cualquier línea por su número. Para ello el vi tiene un comando que hace que todas las líneas aparezcan en pantalla numeradas: :set number vi tiene unos cuantos comandos para activar y desactivar determinadas características. movemos el cursor hasta la última línea y usamos el comando p (este comando añade las líneas marcadas en la línea SIGUIENTE a la que está el cursor). indica la línea actual./. Si dejamos una sin número. Hemos visto cómo referirnos a la primera línea. Rangos de líneas En algunos comandos. También podemos indicar líneas por su posición relativa a la actual: . podemos indicar el rango de líneas en que hay que aplicarlo. como vimos por ejemplo en el caso de dd. Si queremos copiar de la línea actual sólo lo que hay desde el cursor hasta el final. 10dd significa borrar 10 líneas (la actual y las 9 siguientes). se puede añadir esa línea al fichero . Luego vamos al sitio donde queramos pegarlo y usamos el comando p. no está de más pulsa la tecla ESC) y usamos el comando 2Y (marcar dos líneas). Ejemplos: Borra desde la primera línea hasta la actual Borra todo el fichero :. Un signo $ indica la última línea. Para marcar desde el principio de la línea hasta el cursor: y^. pues podemos hacer :.$d Puede haber un problema si queremos borrar un tango de líneas pero no sabemos cuáles son sus números. A continuación. ¿Y si queremos borrar todas las líneas desde donde estamos hasta el final del fichero? No es necesario contar cuántas son. Si se desea usar siempre el vi con las líneas numeradas. Una lista exhaustiva se da al final de este manual. A la mayoría de los comandos que comienzan por :. Por ejemplo. marcamos eso con y$.

sino buscar en el texto ese carácter. Ahí debemos introducir lo que queremos buscar. un espacio y otros tres caracteres. Por ejemplo. Si el texto o patrón es encontrado. un espacio y 3 caracteres más. pero no está de más aprenderla si se va a trabajar frecuentemente con UNIX.$ Busca las líneas compuestas unicamente por dos caracteres. Los comandos para buscar son: / ? Buscar hacia adelante (desde el cursor hasta el final del fichero) Buscar hacia atrás (desde el cursor al principio del fichero) Al usar cualquiera de estos comandos. se localizará la siguiente (en caso de /) o anterior (en caso de ?) ocurrencia del texto buscado. . pero debemos explicar algunas cosas. por ejemplo. Nosotros no queremos que sea así. La sintaxis de estos patrones es algo complicada. sin introducir texto de búsqueda). el cursor se posicionará en él.+5d :-2. Pulsando sucesivamente / o ? seguidos de INTRO (es decir. pues no se limita a palabras exactas. el $ indica el final de línea y el punto un carácter cualquiera. el patrón ^[0-9]: buscará las líneas que comienzen (esto se indica con ^) por un dígito (indicado por [09]) y luego el carácter :. e INTRO a continuación.. se puede ver con la orden orden man ed). sino que puede tratar con patrones. Marca desde dos líneas antes de la actual hasta dos después Búsqueda y sustitución El editor vi es bastante potente en lo que se refiere a búsqueda y sustitución de texto.:. o las palabras que tienen 7 caracteres. etc. El problema que se plantea es cuando queremos buscar el texto 100$ Si lo buscamos con /100$. otro ejemplo: ^. el signo $ se interpretará como fin de línea. pues muchos otros programas utilizan una sintaxis muy semejante. El mismo problema . Así estamos indicando que entre el principio y el final sólo debe haber dos caracteres cualesquiera. El carácter ^ indica el comienzo de línea.+2y Borrar la línea actual y las cinco siguientes. que busque las líneas que comienzan por un número. La explicación de los patrones de búsqueda está más allá de este texto (está explicada en la página de manual UNIX del comando ed. aparece en la última línea de la pantalla dicho comando (sea / o ?) y el cursor a continuación.. Podemos pedirle..

]. El comando s sustituye. Ya vimos cómo hacer esto con los comandos Y. Así para buscar 100$ sería: /100\$ Esto se aplica a los siguientes caracteres: ^ $ .$s/texto a buscar/texto sustituto/ Vemos que entre el carácter :y la letra s podemos indicar el rango de líneas. se usa el comando: :s/texto a buscar/texto sustituto/ Al introducir :s. pero sólo la primera vez que aparezca el texto a buscar en cada línea. [ ] / \ Para SUSTITUIR texto. Eso sustituirá en la línea actual el texto a buscar por texto sustituido. sin su sentido especial. Si queremos hacer esta operación en todo el fichero. podemos definir un comando especial que realice todos ellos con sólo dar ese comando. pero sólo con un trozo a la vez. como hemos dicho. Marcar lugares del texto Podemos marcar puntos determinados del texto y movernos de unos a otros de forma sencilla. y y p. . Estos caracteres deben ir con el signo [bsol ] delante para que se tomen literalmente. Si queremos sustituir todas las veces que aparezca. pero que no vamos a detallar son: Registros Los registros son como zonas de memoria donde podemos guardar trozos de texto para pegarlos en otros lugares. el cursor va a la última línea de la pantalla y ahí escribimos el resto del comando.$s/texto a buscar/texto sustituto/g Como ya hemos dicho. en la página del manual del comando ed se explica todo esto en más profundidad. Macros Si hay secuencias de teclas que repetimos muy a menudo.). añadimos al final g: :1.tenemos con los signos que tienen un sentido especial (como ^. Otras posibilidades Algunas de las muchas posibilidades adicionales que permite el vi.. haremos: :1. un texto por otro.[.

{. todo lo que escribamos a continuación hasta que pulsemos ESC sustituirá a lo que había desde el cursor hasta el final de la línea. Si usamos este comando cuando el cursor está situado sobre alguno de estos caracteres: (. el cursor se va hacia el lugar del % documento donde esté el que lo cierra (o abre). Si no hemos grabado el :efichero actual. no nos lo permitirá a menos que usemos el comando:e! fichero. ya que al no ser comandos que se usan con la tecla Ctrl esto es importante): Repite el último comando. Por ejemplo. Ejecutar una subshell donde podemos escribir comandos del sistema operativo. por tanto:3yw. con este comando la refrescamos. por ejemplo: vi *. admitir que a pesar de su potencia es difícil dominar todo lo que hemos visto. . y a veces aunque no se sepa qué comando existe para hacer algo. Si no hemos grabado el actual no nos lo permitirá a menos que usemos :n!. ¿ cómo marco la palabra actual y las tres siguientes para pegarlas en otro lado? No es difícil pensar que será el mismo comando para marcar una palabra.Por último. . Cambiar hasta el final de la línea.$w fichero :n Grabar desde la línea actual hasta el final en el fichero. J Pega la línea siguiente al final de la actual. Lo mismo pero sustituirá a lo que hay desde el principio de la línea hasta el cursor.[ o sus correspondiente cerrados. Si hemos ejecutado el vi con varios nombres. Cuando la abandonemos (con exit) volvemos al vi. Abandonar el documento actual y cargar el otro fichero. y difícil es explicarlo. Tras escribir este comando. :w Grabar el documento con el nombre fichero (que puede no coincidir con el nombre de fichero que estamos editando). Si aparecen mensajes por la pantalla o ésta se queda desajustada. :rfichero Carga el contenido del fichero en el lugar del documento actual donde esté el cursor.c. :. Esto es muy interesante cuando se están editando programas. pero creo que se entiende facilmente la lógica de sus comandos. yw repetida tres veces. con este comando abandonamos el actual y pasamos a editar el siguiente. Lo mismo pero sustituirá a la palabra sobre la que está el cursor. se puede deducir. ^l c$ c^ cw :!sh Para terminar. u Deshacer el último cambio (undo). en la siguiente table mencionamos algunos comandos útiles (atención a la mayúsculas y minúsculas.