103.8 - Edicion basica de archivos: Teoria

1. Introduccion a vi/vim

Que es vi

vi (Visual Editor) es el editor de texto estandar en todos los sistemas Unix/Linux. Esta siempre disponible en cualquier sistema, incluso en instalaciones minimas. Por esta razon, es esencial conocerlo para el examen LPIC-1.

vi vs vim

vim (Vi IMproved) es una version mejorada de vi con funcionalidades adicionales como:

  • Resaltado de sintaxis
  • Deshacer multinivel
  • Modo visual
  • Autocompletado
  • Soporte de plugins

En la mayoria de distribuciones modernas, al ejecutar vi realmente se ejecuta vim en modo compatible. Para el examen, se asume el uso de vi/vim indistintamente.

vimtutor

vimtutor es un tutorial interactivo integrado en vim que ensena los comandos basicos de forma practica. Es la mejor manera de aprender vi/vim desde cero.

vimtutor              # Inicia el tutorial en el idioma del sistema
vimtutor es           # Inicia el tutorial en espanol (si esta disponible)

El tutorial dura aproximadamente 30 minutos y cubre navegacion, edicion, borrado, busqueda y otros comandos esenciales. Trabaja sobre una copia del archivo del tutorial, por lo que no hay riesgo de danarlo.

Para el examen: vimtutor es la herramienta oficial recomendada para aprender vim. Es un comando disponible en cualquier sistema con vim instalado.

Abrir archivos con vi

vi archivo.txt            # Abrir archivo (lo crea si no existe)
vi +10 archivo.txt        # Abrir en la linea 10
vi +/patron archivo.txt   # Abrir en la primera coincidencia de "patron"
vi -R archivo.txt         # Abrir en modo solo lectura
view archivo.txt          # Equivalente a vi -R
vi archivo1 archivo2      # Abrir varios archivos
vi -o archivo1 archivo2   # Abrir en paneles horizontales (vim)
vi -O archivo1 archivo2   # Abrir en paneles verticales (vim)

2. Modos de vi

vi funciona con diferentes modos de operacion. Este es el concepto mas importante para entender vi.

Los modos principales

ModoDescripcionComo entrarComo salir
Normal (comando)Modo por defecto. Se navega y se ejecutan comandosEsc desde cualquier modoEntrar a otro modo
InsercionSe escribe textoi, I, a, A, o, O desde normalEsc
Comando (ex)Se ejecutan comandos de linea: desde normalEnter o Esc
VisualSe selecciona textov, V, Ctrl+v desde normalEsc

Diagrama de transicion de modos

                    i, I, a, A, o, O
    +----------+  ------------------>  +-------------+
    |          |                       |             |
    |  NORMAL  |  <------ Esc ------  |  INSERCION  |
    |          |                       |             |
    +----------+                       +-------------+
      |      ^
      | :    | Esc/Enter
      v      |
    +----------+
    |          |
    |  COMANDO |
    |  (ex)    |
    +----------+

      v, V, Ctrl+v
    +----------+  ------------------>  +----------+
    |  NORMAL  |                       |  VISUAL  |
    +----------+  <------ Esc ------  +----------+

Para el examen: Si estas perdido en vi, presiona Esc varias veces para volver al modo normal. Desde ahi puedes navegar o salir.


3. Navegacion en modo normal

Movimiento basico (h, j, k, l)

TeclaMovimientoMnemotecnia
hIzquierda (un caracter)“h” esta a la izquierda en el teclado
jAbajo (una linea)“j” parece una flecha hacia abajo
kArriba (una linea)“k” apunta hacia arriba
lDerecha (un caracter)“l” esta a la derecha en el teclado

Las teclas de flechas tambien funcionan en vim, pero h/j/k/l son las teclas clasicas de vi.

Movimiento por palabras

TeclaMovimiento
wInicio de la siguiente palabra (word)
bInicio de la palabra anterior (back)
eFinal de la palabra actual/siguiente (end)
WSiguiente PALABRA (delimitada por espacios)
BPALABRA anterior
EFinal de la PALABRA

Movimiento en la linea

TeclaMovimiento
0Inicio de la linea (columna 0)
^Primer caracter no blanco de la linea
$Final de la linea
f{c}Siguiente ocurrencia del caracter {c} en la linea
F{c}Anterior ocurrencia del caracter {c} en la linea

Movimiento en el archivo

TeclaMovimiento
ggPrimera linea del archivo
GUltima linea del archivo
nG o :nIr a la linea n (ej: 10G o :10)
Ctrl+fAvanzar una pantalla (forward)
Ctrl+bRetroceder una pantalla (backward)
Ctrl+dAvanzar media pantalla (down)
Ctrl+uRetroceder media pantalla (up)
HParte superior de la pantalla (High)
MParte media de la pantalla (Middle)
LParte inferior de la pantalla (Low)

Multiplicadores

Se puede anteponer un numero a cualquier movimiento:

5j        -> Bajar 5 lineas
3w        -> Avanzar 3 palabras
10G       -> Ir a la linea 10
2Ctrl+f   -> Avanzar 2 pantallas

4. Modo de insercion

Comandos para entrar en modo insercion

TeclaAccionDescripcion
iInsertInsertar antes del cursor
IInsert at beginningInsertar al inicio de la linea (primer caracter no blanco)
aAppendInsertar despues del cursor
AAppend at endInsertar al final de la linea
oOpen belowAbrir nueva linea debajo y entrar en insercion
OOpen aboveAbrir nueva linea encima y entrar en insercion
sSubstituteBorrar caracter bajo el cursor e insertar
SSubstitute lineBorrar toda la linea e insertar
RReplace modeModo reemplazo (sobreescribe caracteres)

Para el examen: Las teclas mas importantes son i (insertar), a (append), o (abrir linea abajo), O (abrir linea arriba), I (insertar al inicio) y A (insertar al final).

Para salir del modo insercion, presionar Esc.


5. Borrar (delete) en modo normal

Comandos de borrado

TeclaAccion
xBorrar caracter bajo el cursor (como Supr)
XBorrar caracter antes del cursor (como Retroceso)
ddBorrar (cortar) la linea completa
dwBorrar desde el cursor hasta el inicio de la siguiente palabra
d$ o DBorrar desde el cursor hasta el final de la linea
d0Borrar desde el cursor hasta el inicio de la linea
dGBorrar desde la linea actual hasta el final del archivo
dggBorrar desde la linea actual hasta el inicio del archivo
d{movimiento}Borrar hasta donde lleve el movimiento

Multiplicadores con borrado

3dd       -> Borrar 3 lineas
5x        -> Borrar 5 caracteres
d3w       -> Borrar 3 palabras
2dw       -> Borrar 2 palabras

Importante: En vi, “borrar” es en realidad “cortar”. El texto borrado se guarda en un buffer y puede ser pegado con p.


6. Copiar (yank) y pegar (put)

Copiar

TeclaAccion
yy o YCopiar (yank) la linea completa
ywCopiar desde el cursor hasta el inicio de la siguiente palabra
y$Copiar desde el cursor hasta el final de la linea
y0Copiar desde el cursor hasta el inicio de la linea
yGCopiar desde la linea actual hasta el final del archivo
y{movimiento}Copiar hasta donde lleve el movimiento

Pegar

TeclaAccion
pPegar (put) despues del cursor / debajo de la linea actual
PPegar antes del cursor / encima de la linea actual

Multiplicadores

3yy       -> Copiar 3 lineas
5p        -> Pegar 5 veces

Registros con nombre (named registers)

Los registros en vi/vim son espacios de almacenamiento identificados por letras (a-z) donde se puede guardar texto para pegarlo posteriormente. Esto permite tener multiples portapapeles simultaneos.

ComandoAccion
"ayyCopiar (yank) la linea actual al registro a
"apPegar el contenido del registro a
"bddCortar (borrar) la linea actual y guardarla en el registro b
"bpPegar el contenido del registro b
"a3yyCopiar 3 lineas al registro a
"AyyAnadir (append) la linea al registro a (mayuscula = anadir)
:regMostrar el contenido de todos los registros
:reg aMostrar el contenido del registro a
# Flujo de trabajo con registros:
"ayy       -> Copiar linea al registro a
"byy       -> Copiar otra linea al registro b
"ap        -> Pegar contenido del registro a
"bp        -> Pegar contenido del registro b

Nota: Las letras mayusculas ("A, "B…) anaden al registro en vez de sobreescribirlo. El registro " (sin nombre) es el registro por defecto que se usa con yy, dd, p, etc.

Marcas (marks)

Las marcas permiten guardar posiciones en el archivo para poder volver a ellas rapidamente.

ComandoAccion
maCrear marca a en la posicion actual del cursor
'aSaltar a la linea de la marca a (inicio de la linea)
`aSaltar a la posicion exacta (linea y columna) de la marca a
:marksListar todas las marcas definidas
''Volver a la posicion anterior al ultimo salto
Volver a la posicion exacta anterior al ultimo salto
d'aBorrar desde la linea actual hasta la marca a
y'aCopiar desde la linea actual hasta la marca a

Tipos de marcas:

  • Letras minusculas (a-z): Marcas locales al archivo actual
  • Letras mayusculas (A-Z): Marcas globales que funcionan entre archivos
  • Marcas especiales: '0-'9 posiciones donde se cerro vim anteriormente
# Flujo de trabajo con marcas:
ma         -> Marcar posicion actual como "a"
(navegar a otra parte del archivo)
'a         -> Volver a la linea de la marca "a"
''         -> Volver a donde estabas antes del salto

Para el examen: Las marcas son utiles para navegar rapidamente entre posiciones en archivos grandes. Las mas comunes son las letras minusculas (ma, 'a).

Combinaciones utiles

ddp       -> Intercambiar la linea actual con la de abajo (cortar + pegar debajo)
xp        -> Intercambiar dos caracteres (cortar caracter + pegar despues)
yyp       -> Duplicar la linea actual

7. Buscar y reemplazar

Buscar

TeclaAccion
/patronBuscar hacia adelante
?patronBuscar hacia atras
nSiguiente coincidencia (misma direccion)
NSiguiente coincidencia (direccion contraria)
*Buscar la siguiente ocurrencia de la palabra bajo el cursor
#Buscar la anterior ocurrencia de la palabra bajo el cursor

Buscar y reemplazar (sustituir)

La sustitucion se realiza desde el modo comando con la sintaxis:

:[rango]s/patron/reemplazo/[flags]
ComandoAccion
:s/viejo/nuevo/Reemplazar primera ocurrencia en la linea actual
:s/viejo/nuevo/gReemplazar todas las ocurrencias en la linea actual
:%s/viejo/nuevo/gReemplazar en todo el archivo
:%s/viejo/nuevo/gcReemplazar en todo el archivo, pidiendo confirmacion
:%s/viejo/nuevo/giReemplazar en todo el archivo, ignorar mayusculas
:10,20s/viejo/nuevo/gReemplazar entre las lineas 10 y 20
:.,$s/viejo/nuevo/gDesde la linea actual hasta el final
:.,+5s/viejo/nuevo/gDesde la linea actual, 5 lineas mas

Flags de sustitucion

FlagSignificado
gGlobal (todas las ocurrencias en cada linea)
cConfirm (pedir confirmacion para cada cambio)
iCase insensitive (ignorar mayusculas/minusculas)
ICase sensitive

8. Deshacer y rehacer

TeclaAccion
uDeshacer (undo) la ultima accion
UDeshacer todos los cambios en la linea actual (mientras no te hayas movido)
Ctrl+rRehacer (redo) - revertir el ultimo undo
.Repetir la ultima accion

Nota: vi original solo soporta un nivel de undo. vim soporta deshacer multinivel.


9. Guardar y salir

Desde modo comando (:)

ComandoAccion
:wGuardar (write)
:w archivo.txtGuardar como (con otro nombre)
:w!Forzar guardado (ej: archivo de solo lectura si eres root)
:qSalir (quit) - solo si no hay cambios sin guardar
:q!Salir sin guardar (forzar) - descarta todos los cambios
:wqGuardar y salir
:wq!Forzar guardar y salir
:xGuardar (solo si hay cambios) y salir
:e!Recargar el archivo desde disco (descartar cambios)
:e archivo2.txtAbrir otro archivo

Desde modo normal

TeclaAccion
ZZGuardar y salir (equivalente a :wq)
ZQSalir sin guardar (equivalente a :q!)

Para el examen: ZZ (doble Z mayuscula) es una forma rapida de guardar y salir. Es una de las preguntas mas frecuentes.


10. Ejecutar comandos externos

Desde el modo comando, se pueden ejecutar comandos del shell:

ComandoAccion
:!comandoEjecutar un comando del shell
:!lsListar archivos sin salir de vi
:!bashAbrir un shell (volver a vi con exit)
:r archivoInsertar el contenido de un archivo
:r !comandoInsertar la salida de un comando
:r !dateInsertar la fecha actual

11. Modo visual (vim)

Entrar en modo visual

TeclaTipo de seleccion
vSeleccion por caracteres
VSeleccion por lineas completas
Ctrl+vSeleccion en bloque (rectangular)

Acciones en modo visual

Una vez seleccionado el texto:

  • d - Borrar la seleccion
  • y - Copiar la seleccion
  • > - Indentar a la derecha
  • < - Indentar a la izquierda
  • ~ - Cambiar mayusculas/minusculas
  • :s/viejo/nuevo/g - Sustituir dentro de la seleccion
  • U - Convertir a mayusculas
  • u - Convertir a minusculas

Ejemplo de edicion en bloque (Ctrl+v)

1. Seleccionar un bloque vertical con Ctrl+v + movimiento
2. Presionar I para insertar al inicio del bloque
3. Escribir el texto
4. Presionar Esc para aplicar a todas las lineas seleccionadas

12. Configuracion de vi/vim

Configurar desde dentro de vi

ComandoAccion
:set number o :set nuMostrar numeros de linea
:set nonumber o :set nonuOcultar numeros de linea
:set tabstop=4 o :set ts=4Tabulaciones de 4 espacios
:set expandtab o :set etUsar espacios en lugar de tabulaciones
:set autoindent o :set aiIndentacion automatica
:set ignorecase o :set icBusquedas sin distinguir mayusculas
:set hlsearch o :set hlsResaltar coincidencias de busqueda
:set incsearch o :set isBusqueda incremental
:set syntax=onActivar resaltado de sintaxis
:set pasteModo pegar (desactiva autoindent al pegar)
:set listMostrar caracteres invisibles (tabs, fin de linea)

Archivo de configuracion permanente

La configuracion permanente de vim se guarda en ~/.vimrc:

set number
set tabstop=4
set expandtab
set autoindent
set hlsearch
set incsearch
syntax on

13. El editor nano

Caracteristicas de nano

nano es un editor de texto simple y amigable para principiantes. Muestra las combinaciones de teclas disponibles en la parte inferior de la pantalla.

Abrir archivos con nano

nano archivo.txt              # Abrir archivo
nano +10 archivo.txt          # Abrir en linea 10
nano -B archivo.txt           # Crear backup antes de editar
nano -l archivo.txt           # Mostrar numeros de linea
nano -w archivo.txt           # No ajustar lineas largas (no word wrap)

Atajos principales de nano

En nano, ^ significa Ctrl y M- significa Alt.

AtajoAccion
Ctrl+OGuardar (Write Out)
Ctrl+XSalir (pide guardar si hay cambios)
Ctrl+KCortar linea actual
Ctrl+UPegar linea cortada (Uncut)
Ctrl+WBuscar texto (Where is)
Ctrl+\Buscar y reemplazar
Ctrl+GAyuda
Ctrl+CMostrar posicion del cursor (linea/columna)
Ctrl+_ o Ctrl+/Ir a linea/columna
Alt+UDeshacer
Alt+ERehacer
Ctrl+AInicio de linea
Ctrl+EFinal de linea
Alt+\Inicio del archivo
Alt+/Final del archivo
Ctrl+SpaceAvanzar una palabra
Alt+SpaceRetroceder una palabra

Para el examen: Los atajos mas importantes de nano son Ctrl+O (guardar), Ctrl+X (salir), Ctrl+K (cortar), Ctrl+U (pegar) y Ctrl+W (buscar).


14. Configurar el editor predeterminado

Variables de entorno

# Establecer vi como editor predeterminado
export EDITOR=vi
export VISUAL=vi
 
# Establecer nano como editor predeterminado
export EDITOR=nano
export VISUAL=nano
  • EDITOR: Editor por defecto para programas de linea de comandos
  • VISUAL: Editor por defecto para programas que soportan terminales con capacidades de pantalla completa

Para que sea permanente, agregar al archivo ~/.bashrc o ~/.profile.

Comando select-editor / update-alternatives

# En Debian/Ubuntu
select-editor                 # Selector interactivo
update-alternatives --config editor   # Configurar editor del sistema

15. Resumen de lo mas importante para el examen

Modos de vi

Normal  -->  i/a/o  -->  Insercion  -->  Esc  -->  Normal
Normal  -->  :      -->  Comando    -->  Enter/Esc --> Normal
Normal  -->  v/V    -->  Visual     -->  Esc  -->  Normal

Comandos imprescindibles

Guardar:          :w
Salir:            :q
Guardar y salir:  :wq  o  ZZ
Salir sin guardar: :q!
Buscar:           /patron
Reemplazar todo:  :%s/viejo/nuevo/g
Deshacer:         u
Rehacer:          Ctrl+r
Copiar linea:     yy
Pegar:            p
Borrar linea:     dd

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • :wq vs :q! vs ZZ:wq guarda y sale; :q! sale SIN guardar (descarta cambios); ZZ (mayusculas, sin :) guarda y sale igual que :wq. El examen puede preguntar como salir sin guardar cambios.
  • Modo normal vs modo insercion — En vi, las teclas tienen funciones diferentes segun el modo. dd en modo normal borra una linea; en modo insercion escribe “dd”. El examen puede preguntar que hace una tecla sin especificar el modo (siempre asumir modo normal).
  • i vs a vs o para entrar en insercioni inserta antes del cursor; a inserta despues del cursor; o abre nueva linea debajo. I inserta al inicio de la linea; A al final; O nueva linea arriba. El examen puede confundir estas variantes.
  • /patron busca hacia adelante; ?patron busca hacia atras — Despues de buscar, n repite la busqueda en la misma direccion; N en la direccion opuesta. El examen puede preguntar como buscar hacia atras en vi.
  • u deshace; Ctrl+r rehace — En vim, u deshace el ultimo cambio y se puede repetir. En vi clasico, u solo deshace/rehace el ultimo cambio (toggle). El examen puede preguntar como deshacer multiples cambios.
  • :set number vs :set nonumber:set number muestra numeros de linea; :set nonumber los oculta. El examen puede preguntar como activar la numeracion de lineas en vi.
  • EDITOR vs VISUALVISUAL se usa para editores de pantalla completa; EDITOR para editores de linea. Muchos programas comprueban VISUAL primero, luego EDITOR. El examen puede preguntar que variable configurar para cambiar el editor por defecto.
  • yy copia la linea; p pega debajo; P pega arribayy (yank) copia la linea actual al buffer. p pega despues del cursor/linea; P pega antes. dd corta la linea (se puede pegar con p). El examen puede confundir copiar con cortar.
  • nano: Ctrl+O guarda; Ctrl+X sale — Los atajos de nano usan ^ para Ctrl. ^O (WriteOut) guarda; ^X sale; ^K corta linea; ^U pega. El examen puede preguntar atajos basicos de nano.