En este artículo veremos como funciona el editor de texto vi.
- Introducción
- Ejecutando el editor de texto vi por primera vez
- Modos del editor de texto vi
- Modo comando
- Modo edición
- Modo línea o ex
- Muy importante
- 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.
- Ejecutando el editor de texto vi por primera vez (Volver al índice General)
- El comando
viabre la ventana de edición sin abrir ningún archivo:$ vi
- El comando
vi nombre-de-archivoedita el archivonombre-de-archivosi 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
- El comando
- 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
aque el comandoA. - 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 teclaReturn(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 devique nos permiten mover el cursor por la pantalla del editor.
Teclas Acción Las teclas de flechas Mover el cursor en la dirección de la flecha utilizada. h Mover el cursor hacia la izquierda. l Mover el cursor hacia la derecha. k Mover el cursor arriba. j Mover el cursor abajo. 1G Mover el cursor al comienzo del archivo. nG Mover 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. G Mover el cursor al final del archivo. w Mover el cursor una palabra a la derecha. b Mover 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. H Moverse a la primera línea de la pantalla. L Moverse a la última línea de la pantalla. M Moverse a la mitad de la pantalla. Ctrl+F Avanzar una pantalla. Ctrl+D Avanzar media pantalla. Ctrl+B Retroceder una pantalla. Ctrl+U Retroceder media pantalla - Cambio de modo comando a modo edición (Volver al índice General)
Comandos devique nos permiten insertar texto y líneas en el archivo.
Teclas Acción i Insertar texto a la izquierda del cursor. a Insertar texto a la derecha del cursor. I Insertar texto al comienzo de la línea donde se encuentra el cursor. A Insertar texto al final de la línea donde se encuentra el cursor. o Inserta una línea debajo de la actual. O Inserta una línea encima de la actual. - Cambiar texto (Volver al índice General)
Comandos devique nos permiten sustituir una cadena de caracteres por otra del texto en edición.
Teclas Acción s TEXTO Esc Sustituye el carácter bajo el cursor por TEXTO. Teclear s seguido del nuevo texto y pulsar Esc para terminar. r CARACTER Reemplaza 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. xp Intercambia los caracteres de la posición del cursor y el siguiente. cw PALABRA Esc Reemplaza 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.cc Reemplazar 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. C Reemplazar 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. r Partir 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. J Unir 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 devique nos permiten borrar caracteres, palabras, parte de una palabra, parte de una línea y líneas en el archivo.
Teclas Acción dd Borra la línea donde se encuentra el cursor. ndd Borra n líneas consecutivas incluyendo la línea donde se encuentra el cursor. D Borra desde donde está el cursor hasta el final de la línea. d0 Borra todo lo que está a la izquierda de la posición del cursor de una línea. x Borra el carácter donde se encuentra el cursor. X Borra el carácter anterior a la posición donde se encuentra el cursor. dw Borra desde donde se encuentra el cursor hasta el final de la palabra, incluido el carácter espacio si existe. dG Borra desde la línea actual hasta el final del archivo. d1G Borra desde el principio del archivo hasta la línea actual. - Deshacer cambios (Volver al índice General)
Comandos devique nos permiten deshacer los cambios realizados antes de grabar el archivo en disco.
Teclas Acción u Deshacer el comando previo. U Deshacer todos los cambios que se han hecho en una línea. Solo funciona si continuamos en dicha línea p o P Deshacer 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:- Cortamos el texto que deseamos mover utilizando alguno de los comandos usados para borrar texto.
- Movemos el cursor, con alguno de los comandos utilizados para mover el cursor por el texto, hasta el lugar donde deseamos pegar el texto.
- Pegamos el texto con el comando
poP(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:- Movemos el cursor a la posición de la primera línea a copiar.
- Escribimos el número de líneas que queremos copiar.
- Tecleamos
yyoY(comando yank). - Movemos el cursor hasta el lugar donde queremos pegar el texto.
- Pegamos el texto con el comando
poP(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:
- Nos situamos en la primera línea a copiar.
- Tecleamos comillas dobles(
") seguido de la letra con que deseamos identificar el buffer. Por ejemplo,"a. - Escribimos el número de líneas a copiar o cortar.
- Tecleamos
yyoY(comando yank) odd(comando delete), dependiendo de si vamos a copiar o cortar el texto. - Nos situamos en la línea donde queremos copiar el texto.
- Tecleamos comillas dobles (
") seguidas por la letra del buffer y porpoP(comandoput).
Por ejemplo, para copiar:
"a3yy
o para cortar:
"a3dd
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 porpoP(comando put).Nota: Hay que tener en cuenta que el comando
yysolo permite copiar líneas completas, no nos permite copiar bloques de texto.
- Movernos con el cursor (Volver al índice General)
- 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:
Para regresar al modo comando, basta con presionar la teclaTeclas Acció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. Esc. Si no recordamos en qué modo estamos, pulsandoEscnos aseguramos de que estamos en modo comando. - 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 teclaReturn(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 teclaEscque 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 devique 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.
Teclas Acción :set nu Activa la visualización de los números de línea. :set nonu Desactiva la visualización de los números de línea. - Copiar, Mover y Borrar un rango de líneas (Volver al índice General)
Comandos devique 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.
Teclas Acción :#línea,#línea co #línea Copiar 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ínea Mover 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 d Elimina 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 devique nos permiten buscar cadenas de caracteres dentro del documento. Las búsquedas envison 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 (\).
Teclas Acción :set ic viignorará mayúsculas y minúsculas durante la búsqueda.:set noic vies sensible a mayúsculas y minúsculas durante la búsqueda./texto Busca hacia adelante la cadena de caracteres texto. ?texto Busca hacia detras la cadena de caracteres texto. /^texto Busca una línea que empieza por texto. /texto$ Busca una línea que termina por texto. /\<texto Busca 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
nse va a la siguiente ocurrencia de texto, y pulsando el carácterNa 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
ypara sí onno. Para finalizar el proceso de reemplazo, pulsaremos las teclasCtrl+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:
xxxencontraría las cadenascxxxyfxxx.[c-f]xxxencontraría todas las cadenas que comiencen por cualquier letra de laca lafy sigan conxxx.
- Para buscar cero ó más ocurrencias del último carácter escrito, añadiremos un asterisco (
*) en la cadena.
- El punto (
- 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íneaes 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 devique nos permiten guardar los cambios, salir del editor salvando o no los cambios, etc.
Teclas Acción :q Salir del editor si no hubo cambios. :q! Salir del editor sin guardar cambios. :wq Guardar cambios y salir del editor. :w Guardar cambios y seguir en el editor (si el archivo tiene nombre). :w archivo Guardar cambios en archivo (cuando el documento aún no tiene nombre).
- Conocer el número de cada línea (Volver al índice General)
- 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-archivoes el archivo que se estaba editando en el momento en que se produjo la caída.
- Recuperación ante una caída (Volver al índice General)






Deja una respuesta