El editor vi es un potente editor con multitud de posibilidades. Conviene conocer como usar vi en Linux.
En este artículo:
- Modos del editor vi
- Insertando texto
- Borrar texto en el editor vi
- PEGAR texto en vi
- COPIAR LÍNEAS
- Navegación con el cursor
- Atajos más útiles para navegación con el cursor en ficheros
- Otros atajos para navegación en ficheros
- Reemplazar (Buscar y reemplazar texto con vi)
- Otros atajos en vi
- Resumen de los mejores atajos de vi
Modos del editor vi
Antes de nada, hemos de tener claro que el editor vi ofrece el modo comando, y el modo de inserción.
–> Al modo comando accedemos pulsando la tecla Escape. También es el modo en el que accedemos a los ficheros cuando usamos vi.
–> Al modo de inserción accedemos pulsando la tecla i (insert).
Controles de vi
Estas secuencias de comandos básicos de vi, para guardar, salir .. etc, los ejecutaremos desde el modo COMANDO.
Recordemos que si nos encontramos en el modo de inserción, tendremos que pulsar la tecla ESC para salir de inserción e ir al modo COMANDO y así poder ejecutar estos comandos:
:w |
Guardar
:x |
Guardar y salir
:q |
Salir, cuando no se han realizado cambios.
:q! |
Salir, forzando que se descarten los cambios realizados.
Insertando texto
Estos atajos permiten insertar texto con el editor vi; accederemos a ellos desde el modo COMANDO (o sea que antes de ejecutar cualquiera de los siguientes atajos, tenemos que estar en el modo COMANDO, no en el modo de inserción).
Para ver cómo funcionan estos atajos utilizaremos un fichero de ejemplo, con este contenido:
1 2 3 4 5 6 | aaaaa bbbbb ccccc ddddd eeeee fffff |
Y en todos los ejemplos, nuestra posición original del cursor será la primera posición de la tercera línea:
-
i
Pasar a modo de inserción. Inserta antes del cursor. Cuando entramos a MODO DE INSERCIÓN, podremos ver que aparece “INSERT“
-
a
Añade (append 1 posición) después de la posición del cursor. Entra en modo de Inserción y se coloca después de la posición actual del cursor. Comprobamos que partiendo de nuestra posición original, la tercera línea, primer carácter, pulsamos la letra “a“, y vemos que el cursor se mueve 1 posición adelante de donde estaba:
-
A
Añade (append final de linea) al final de la línea donde se encuentre el cursor (Entra en modo de Inserción y se al final de la línea actual del cursor).
Por ejemplo, teniendo este fichero con este contenido creado, vemos que el cursor está al principio de la tercera línea.
Pulsamos “A” (a mayúscula) y el cursor se posiciona al fila de la línea, y podremos comenzar a escribir:
-
o
Añade una nueva línea DESPUÉS de la linea actual.
Partiendo del mismo fichero que teníamos, pulsamos la letra “o” (o minúscula), y vemos que se añade una nueva línea después de la actual:
-
O
Añade una nueva línea ANTES de la linea actual.
De nuevo partiendo de la tercera línea, en la primera posición, pulsamos la tecla “O” (o mayúscula), y vemos que se añade una nueva línea ANTES de la línea actual.
-
r
Sobreescribe un caracter. Vemos que se sobreescribe el caracter donde se encontraba el cursor (hemos pulsado la letra “r” para sobreescribir, y luego en este caso hemos sobreescrito con una x):
-
R
Sobreescribe (REPLACE, reemplaza) muchos caracteres.
Esta opción nos permite reemplazar más de un caracter. Pulsamos la letra R (r mayúscula) y vemos que aparece el texto “REPLACE“, y podemos comenzar a reemplazar caracteres:
En este caso el cursor estaba en la primera posición de la tercera línea; hemos pulsado la letra R, y hemos comenzado a reemplazar con la letra X.
-
C
Reescribe la línea entera desde la posición actual del cursor. Vemos que se reescribe la línea entera desde la posición en la que se encontraba el cursor (en este caso al principio de la línea):
Borrar texto en el editor vi
x |
Borra el caracter a la derecha del cursor
X |
Borra el caracter a la izquierda del cursor
D |
Borra el resto de la línea
dd |
Borra la línea actual
ndd |
Borra n líneas, comenzando por la actual. Por ejemplo, borrar 3 líneas sería 3dd
PEGAR texto en vi
-
p
Pega después de la posición del cursor. Para esto hemos de haber copiado algo antes. Pongamos que hemos copiado 1 línea previamente, con 1yy, y luego la pegamos, y vemos que se pega la línea entera después de la posición del cursor:
-
P
Pega ANTES de la posición del cursor. Lo mismo que en el ejemplo anterior, pero en este caso vemos que la línea se pega en la posición anterior a donde estaba el cursor:
COPIAR LÍNEAS
Vi permite copiar el número de líneas que le digamos, usando “yy” en modo COMANDO.
yy |
Copiar 1 línea
Así, volvemos a nuestro fichero, en la tercera línea:
Y vamos a copiar 1 línea con :1yy
1yy |
Nos posicionamos al final del fichero (podemos hacerlo usando la tecla G, como hemos visto anteriormente) y pegamos la línea copiada, con
p |
Copiar más de 1 línea
Nos colocamos de nuevo en la tercera linea:
y vamos a copiar 3 lineas. Pulsamos 3yy
3yy |
Después nos vamos al final del documento con la letra G, y pegamos con “p” las líneas copiadas:
Navegación con el cursor
Además de las flechas de posición del teclado, disponemos de las teclas h, j, k, l , para mover el cursor a la izquierda, abajo, arriba y derecha respectivamente.
Atajos más útiles para navegación con el cursor en ficheros
0
Va al comienzo de la línea
$ |
Va al final de la línea
1G |
Va al comienzo del fichero
G |
Va al final del fichero
:n |
Ir a la línea número “n” del fichero. Por ejemplo, ir a la cuarta línea sería :4
H |
Ir a la parte superior del fichero
L |
Ir al final del fichero
M |
Ir a la mitad del fichero
gg |
ir al principio del fichero
Otros atajos para navegación en ficheros
h o flecha izquierda |
izquierda
j o flecha abajo |
abajo
k o flecha arriba |
arriba
l o flecha derecha |
derecha
w |
coloca el cursor en la siguiente palabra
b |
coloca el cursor al comienzo de la palabra
e |
coloca el cursor al final de la palabra
BUSCAR con vi
/texto |
busca hacia delante la coincidencia con “texto”
?texto |
busca hacia atrás la coincidencia con “texto”
n |
va al siguiente resultado (buscando hacia delante).
N |
Va al resultado anterior (buscando hacia atrás).
:set ic |
Ignorar las Mayúsculas o minúsculas mientras realiza la búsqueda (Case INSENSITIVE)
:set noic |
Tiene en cuenta en la búsqueda las Mayúsculas y minúsculas (NO Case SENSITIVE, o sea CASE SENSITIVE
:1,5g/cadena |
Busca la cadena de texto, de la línea 1 a la 5.
Ejemplos de búsqueda
- Buscar hacia delante:
Partiendo de la línea tercera, buscamos “fffff”, y vemos que encuentra la última línea, donde aparece “fffff”:
Sin embargo, si nos posicionamos al final del fichero:
realizamos la búsqueda hacia delante:
/fffff |
y vemos que aparece el mensaje :
search hit BOTTOM, continuing at TOP
es porque está buscando hacia delante.
- Buscar hacia atrás: Caso inverso al anterior. Partiendo de la linea tercera, buscamos “aaaaa”, y encuentra el texto en la primera línea:
?aaaaa |
Pero si buscamos “fffff”
?fffff |
Mostrará el mensaje inverso:
search hit TOP, continuing at BOTTOM
Buscar y reemplazar texto
- Buscar y reemplaza en la línea actual, la primera coincidencia de la línea:
:s/buscar/reemplazar/ |
- Busca y reemplaza en la línea actual, TODAS las coincidencias de la línea:
:s/buscar/reemplazar/g |
- Busca y reemplaza en TODO el fichero, la primera instancia de cada línea
:%s/buscar/reemplazar/ |
- Busca y reemplaza en TODO el fichero, TODAS las instancias de cada línea
:%s/buscar/reemplazar/g |
Otros atajos en vi
u |
Deshacer el último cambio
J |
juntar líneas
. |
Repetir el último comando
U |
deshacer todos los cambios hechos en la línea
v |
Accede al modo visual (se marca lo que vamos haciendo)
Ctrl + c |
Sale del modo de Inserción
Resumen de los mejores atajos de vi
Además de los comandos básicos para guardar y salir, esta es nuestra lista top de comandos más básicos y útiles para trabajar con el editor vi:
dd |
Borrar línea actual
nyy |
Copiar n líneas
p |
pegar después de la posición del cursor
J |
Unir líneas
G |
ir al final del fichero
1G |
Ir al principio del fichero
:n |
Ir a la línea n del fichero
:set number |
Mostrar los números de línea
o |
Añadir una nueva línea tras la línea actual
u |
Deshacer el último cambio
:%s/buscar/reemplazar/g |
Buscar y reemplazar en todo el fichero