Aprende leyendo en orden

Los fundamentos del editor de texto vi

Aprende a iniciar vi, a cambiar entre el modo normal y el de inserción, a volver con Esc, y a guardar con :wq o descartar con :q! — todo práctico en una terminal del navegador.

Iniciar vi y sus modos

vi es un editor de texto que está en casi todos los servidores Linux.

En este curso aprenderás las operaciones mínimas de vi que funcionan en cualquier servidor.

vi tiene dos modos.

Justo después de arrancar estás en el modo normal, donde las teclas actúan como movimiento o comandos y no puedes escribir texto.

Pulsar i cambia al modo de inserción, donde puedes escribir caracteres.

Pulsar Esc te devuelve al modo normal.

Los dos modos de vi
modo normalmover / comando(:wq, etc.)modo de inserciónpuedes escribir textocambiar con ivolver con Esc
Justo tras arrancar estás en el modo normal. i entra en el modo de inserción, y Esc vuelve al modo normal.
vi memo.txt   # abrir memo.txt (arranca en modo normal)
# pulsa i       -> modo de inserción (puedes escribir)
# escribe texto
# pulsa Esc     -> de vuelta al modo normal

¿Atascado? Esc y luego :q! te saca

Si cometes un error y la pantalla parece atascada, pulsa Esc unas cuantas veces y luego :q! para salir y empezar de nuevo.

Esto siempre te devuelve sin problemas al estado original.

① Abre note.txt con vi note.txt (arranca en modo normal).

② Pulsa i para cambiar al modo de inserción y escribe hello vi.

③ Pulsa Esc para volver al modo normal, luego escribe :wq y pulsa Enter para guardar y salir.

④ De vuelta en la terminal, ejecuta cat note.txt y confirma que lo que escribiste se guardó. (Ejecútalo correctamente y aparecerá una explicación.)

Linux console
0 / 2 completado(s)
Loading Linux Terminal...

Guardar y descartar — :wq y :q!

Escribir : en el modo normal abre una línea de comandos donde puedes introducir comandos relacionados con la salida.

:wq significa write and quit, es decir, guardar y cerrar.

:w solo guarda sin salir, y :q sale cuando no hay cambios.

:q! descarta los cambios y sale a la fuerza, volviendo al estado anterior a la edición.

Tecla / ComandoModoAcción
vi fileAbrir un archivo (arranca en normal)
iNormalEntrar en el modo de inserción
EscInserciónVolver al modo normal
:wNormalGuardar (sin salir)
:qNormalSalir (cuando no hay cambios)
:wqNormalGuardar y salir
:q!NormalDescartar los cambios y salir
:wq guarda, :q! descarta
:wqguardar y salir(se conserva):q!descartar y salir(vuelve a antes)
:wq guarda los cambios y sale; :q! descarta los cambios y sale.

:q! no conserva ningún cambio

:q! sale descartando todos los cambios de esa sesión de edición.

Viene bien cuando te equivocas al escribir y quieres empezar de nuevo, pero cuando tienes contenido que conservar, usa :wq.

vi draft.txt   # abrir
# i para insertar -> escribe texto -> Esc
# escribe :q!     -> descartar los cambios y salir (draft.txt queda vacío)
cat draft.txt  # no se escribió nada

① Abre scratch.txt con vi scratch.txt.

② Cambia al modo de inserción con i, escribe temporary, luego pulsa Esc.

③ Escribe :q! y pulsa Enter para descartar los cambios y salir.

④ De vuelta en la terminal, ejecuta cat scratch.txt y confirma que no se guardó nada porque lo descartaste.

Linux console
0 / 2 completado(s)
Loading Linux Terminal...

Hacer más con vi — a / o y :w

i no es la única forma de entrar en el modo de inserción.

a empieza a escribir a la derecha del cursor, y o abre una línea nueva debajo del cursor y empieza a escribir.

La A mayúscula empieza al final de la línea, y O abre una línea nueva encima del cursor.

Todas vuelven al modo normal con Esc igual que las demás.

También puedes usar los comandos de guardado de forma selectiva.

:w solo guarda, sin salir, así que puedes seguir editando.

Para una edición larga, guarda a menudo con :w y cierra con :wq al final para ir sobre seguro.

TeclaDónde empieza a escribir
iA la izquierda del cursor (antes de él)
aA la derecha del cursor (después de él)
oEn una línea nueva abierta debajo
AAl final de la línea
OEn una línea nueva abierta encima
Distintas formas de entrar en el modo de inserción
iescribir a laizquierda del cursoraescribir a laderecha del cursoroabrir línea nuevadebajo y escribir
i empieza por la izquierda, a por la derecha y o desde una línea nueva debajo. Todas vuelven con Esc.

① Abre practice.txt con vi practice.txt.

② Pulsa o para abrir una línea nueva debajo y entrar en el modo de inserción, luego escribe first line.

③ Pulsa Esc, pulsa o de nuevo para abrir otra línea nueva, escribe second line, y pulsa Esc.

④ Escribe :w y pulsa Enter para guardar (sin salir todavía), luego escribe :q para salir.

⑤ En la terminal, ejecuta cat practice.txt y confirma que ambas líneas se guardaron.

Linux console
0 / 2 completado(s)
Loading Linux Terminal...

Eliminar y copiar líneas — dd / yy / p

En el modo normal puedes editar por línea sin escribir caracteres.

dd elimina (corta) toda la línea en la que está el cursor.

x elimina un carácter bajo el cursor, y u deshace la operación anterior (undo).

yy copia (yank) la línea en la que está el cursor, y p pega el contenido copiado —o cortado con dd— en la línea debajo del cursor.

Una línea cortada con dd también puede pegarse con p, así que sirve también para mover líneas.

TeclaAcción
xEliminar un carácter bajo el cursor
ddEliminar una línea (cortar)
3dd / d3dEliminar varias líneas con un contador (p. ej. 3 líneas)
yyCopiar una línea (yank)
10yy / y10yCopiar varias líneas con un contador (p. ej. 10 líneas)
pPegar la línea copiada / cortada debajo
uDeshacer la operación anterior
Editar líneas con dd / yy / p
ddcortar la línea actualyycopiar la línea actualppegar en la líneade debajo
dd corta, yy copia y p pega en la línea de debajo. Todas se escriben en el modo normal.

① Abre edit.txt con vi edit.txt.

② Entra en el modo de inserción con i, escribe one y Enter, luego two, y pulsa Esc para preparar 2 líneas.

③ Copia la línea actual con yy y pégala debajo con p, confirmando que se añade la misma línea.

④ Luego elimina la línea en la que está el cursor con dd.

⑤ Guarda y sal con :wq, y comprueba el resultado con cat edit.txt.

Linux console
0 / 2 completado(s)
Loading Linux Terminal...

Añadir un contador delante te permite operar sobre varias líneas a la vez.

3dd (o d3d) elimina 3 líneas, y 10yy (o y10y) copia 10 líneas.

Si pegas con p tras una eliminación o copia, puedes mover o duplicar varias líneas en una sola operación.

Operar sobre varias líneas con un contador
3dd / d3deliminar 3 líneasde una vez10yy / y10ycopiar 10 líneasde una vezppegar las líneascopiadas de una vez
Añadiendo un contador delante: 3dd elimina 3 líneas, 10yy copia 10 líneas. Pégalas de una vez con p.

① Abre block.txt con vi block.txt.

② Entra en el modo de inserción con i, escribe one y Enter, y de igual modo escribe de two a five, una por línea, para un total de 5 líneas, luego pulsa Esc.

③ Escribe :1 y pulsa Enter para ir a la línea 1, corta las 3 líneas de arriba con 3dd (o d3d), luego pega esas 3 líneas debajo del cursor con p y confirma que puedes mover líneas.

④ Copia 2 líneas con 2yy (o y2y) y pégalas debajo con p.

⑤ Guarda y sal con :wq, y comprueba el resultado con cat block.txt.

Linux console
0 / 2 completado(s)
Loading Linux Terminal...

Mover el cursor y buscar — gg / G y / ?

En un archivo largo, saltar de una vez te lleva a tu destino más rápido que moverte línea a línea.

gg mueve el cursor a la primera línea del archivo, y G a la última línea.

Incluso donde gg no funciona, 1G mueve a la primera línea.

Para encontrar texto, usa la búsqueda.

Escribir /word y Enter busca hacia adelante (hacia abajo) word desde el cursor.

?word busca hacia arriba (hacia atrás), n mueve a la siguiente coincidencia en la misma dirección, y N a una coincidencia en la dirección opuesta.

Todas se escriben en el modo normal; no hace falta Esc.

TeclaAcción
gg / 1GMover a la primera línea
GMover a la última línea
/wordBuscar hacia abajo (adelante) word
?wordBuscar hacia arriba (atrás) word
n / NA la siguiente coincidencia / a la anterior
Moverse con gg / G y buscar con / ?
gg / 1Gmover a laprimera líneaGmover a laúltima línea/word nbuscar abajo,siguiente?word Nbuscar arriba,opuesto
gg/G saltan a la primera/última línea; /word busca hacia abajo y ?word hacia arriba, con n/N moviendo a la siguiente/anterior coincidencia.

① Prepara un archivo con muchas líneas usando ls -l /bin > nav.txt.

② Ábrelo con vi nav.txt, ve a la última línea con G, y a la primera línea con gg (o 1G).

③ Escribe /sh y pulsa Enter para buscar hacia abajo las líneas que contengan sh, luego ve a la siguiente coincidencia con n y a la anterior con N.

④ Escribe ?ls y pulsa Enter para buscar hacia arriba ls esta vez.

⑤ Como no hiciste ningún cambio, sal con :q y vuelve a la terminal.

Linux console
0 / 2 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1Para poder escribir texto en vi, ¿qué pulsas en el modo normal?

Pregunta 2¿Qué pulsas para volver del modo de inserción al modo normal?

Pregunta 3¿Qué ocurre cuando ejecutas :q!?