Saltar al contenido principal

105. Edición básica: insertar, borrar, reemplazar ✂️

La gramática de Vim

Ahora que dominas los movimientos básicos, es hora de aprender a editar texto. Vim tiene una "gramática" lógica: Verbo + Objeto. Los verbos son acciones (borrar, cambiar, copiar) y los objetos son los movimientos que acabamos de aprender.

📝 Insertar texto

Formas de entrar al modo Insert

ComandoAcciónCuándo usarlo
iInsert antes del cursorInsertar en posición exacta
aInsert después del cursor (append)Añadir después de carácter
IInsert al inicio de líneaAñadir al principio
AInsert al final de líneaAñadir al final
oNueva línea abajoCrear línea nueva
ONueva línea arribaInsertar línea antes

Ejemplo visual:

const message = "Hello";
^
cursor aquí
  • i → Insertar aquí: const me|ssage
  • a → Insertar aquí: const mes|sage
  • I → Insertar aquí: |const message
  • A → Insertar aquí: const message = "Hello";|

Edición especializada

ComandoAcciónDescripción
sSubstitute carácterBorra carácter y entra en Insert
SSubstitute líneaBorra línea completa y entra en Insert
CChange hasta finalBorra desde cursor al final de línea

✂️ Borrar texto

Borrado básico

ComandoAcciónEquivalente
xBorrar carácter actualdl
XBorrar carácter anteriordh
ddBorrar línea completa-
DBorrar hasta final de línead$

Borrado con movimientos

La fórmula es: d + {movimiento}

ComandoAcciónDescripción
dwBorrar palabraDesde cursor hasta inicio siguiente palabra
deBorrar hasta final de palabraNo incluye el espacio
dbBorrar palabra hacia atrásÚtil en mitad de palabra
d$Borrar hasta final de líneaIgual que D
d0Borrar hasta inicio de líneaDesde cursor al inicio
dggBorrar hasta inicio de archivoTodo desde cursor hacia arriba
dGBorrar hasta final de archivoTodo desde cursor hacia abajo

Ejemplo práctico:

const userName = "alice_smith_123";
^
cursor aquí
  • dwconst userName = "; (borra hasta el siguiente espacio)
  • deconst userName = "_smith_123"; (borra hasta final de palabra)
  • dd → (borra toda la línea)

🔄 Cambiar texto

El comando c (change) es igual que d pero te deja en modo Insert:

ComandoAcciónEquivalente a
cwCambiar palabradw + i
ceCambiar hasta final de palabrade + i
ccCambiar línea completadd + o
CCambiar hasta final de líneaD + A
c$Cambiar hasta final de líneaIgual que C

Ejemplo de workflow:

def calculate_price(amount):
return amount * 1.21

Para cambiar calculate_price a calculate_total:

  1. Posiciona cursor en c de calculate
  2. cw (change word)
  3. Escribe calculate_total
  4. Esc

📋 Copiar y pegar

Copiar (yank)

ComandoAcciónDescripción
yyCopiar línea completaMás común
YCopiar línea completaIgual que yy
ywCopiar palabraDesde cursor hasta siguiente palabra
yeCopiar hasta final de palabraSin incluir espacio
y$Copiar hasta final de línea-
yGCopiar hasta final de archivo-

Pegar (put)

ComandoAcciónCuándo usar
pPegar después del cursorPara caracteres/palabras
PPegar antes del cursorPara líneas completas

Comportamiento inteligente:

  • Si copiaste una línea completa (yy), p pega en la línea de abajo
  • Si copiaste parte de línea (yw), p pega después del cursor

🔢 Modificadores numéricos

Todos los comandos pueden llevar números:

ComandoAcción
3ddBorrar 3 líneas
5dwBorrar 5 palabras
2yyCopiar 2 líneas
4pPegar 4 veces

🔄 Deshacer y rehacer

ComandoAcciónDescripción
uDeshacerUndo
Ctrl+rRehacerRedo
UDeshacer todos los cambios en líneaRestaurar línea original

Tip: Granularidad del undo

  • Cada vez que sales de modo Insert se crea un "undo point"
  • Los movimientos en modo Normal no afectan el historial
  • Usa Ctrl+g u en Insert para crear undo points manuales

🎯 Objetos de texto avanzados

Sintaxis: {verbo}{modificador}{objeto}

Modificadores:

  • i = inner (dentro de)
  • a = around (alrededor de, incluyendo)

Objetos comunes:

ObjetoDescripciónEjemplo
wpalabradiw = borrar palabra
soracióndas = borrar oración
ppárrafodap = borrar párrafo
"entre comillas doblesdi" = borrar contenido
'entre comillas simplesci' = cambiar contenido
( o )entre paréntesisda( = borrar incluyendo ( )
[ o ]entre corchetesci[ = cambiar contenido
{ o }entre llavesda{ = borrar incluyendo

Ejemplos prácticos:

function greet(name) {
console.log("Hello " + name + "!");
}

Con cursor en cualquier parte de la función:

  • di( → borra name (dentro de paréntesis)
  • da( → borra (name) (alrededor de paréntesis)
  • di" → borra Hello + name + ` (dentro de comillas)
  • da" → borra "Hello " + name + "!" (incluyendo comillas)

🔁 El comando punto (.)

El comando más poderoso de Vim: . repite la última acción

Ejemplo de uso:

<ul>
<item>Apple</item>
<item>Banana</item>
<item>Cherry</item>
</ul>

Para cambiar <item> a <li>:

  1. Posiciona cursor en i de item
  2. cw (change word)
  3. Escribe li
  4. Esc
  5. Busca siguiente item con /item
  6. Presiona n para ir al siguiente
  7. Presiona . para repetir el cambio
  8. Repite pasos 6-7

💪 Ejercicios prácticos

Ejercicio 1: Edición básica

const user_name = "alice";
const user_age = 25;
const user_email = "alice@example.com";

Cambia todas las variables de user_ a person_:

  1. Posiciona cursor en user de la primera línea
  2. cw + person + Esc
  3. Busca siguiente con /user
  4. n para ir al siguiente
  5. . para repetir cambio

Ejercicio 2: Objetos de texto

def calculate(price, tax, discount):
total = (price + tax) - discount
return total

Tareas:

  • Cambia calculate a compute usando cw
  • Borra el parámetro discount usando da, (o navegación + dw)
  • Cambia el contenido de los paréntesis usando ci(

Ejercicio 3: Workflow de refactoring

.header {
background-color: blue;
color: white;
padding: 10px;
}

Cambia blue a #3498db:

  1. f + b para buscar 'blue'
  2. cw para cambiar palabra
  3. Escribe #3498db

🎮 Patrones de edición eficientes

Patrón 1: Cambio múltiple

  1. Hacer el cambio una vez
  2. Buscar siguiente ocurrencia (/ o *)
  3. Usar n para navegar
  4. Usar . para repetir

Patrón 2: Edición en bloque

  1. Seleccionar múltiples líneas (Visual mode - próximo capítulo)
  2. Aplicar comando a todas (c, d, >, <)

Patrón 3: Edición precisar

  1. Usar objetos de texto (iw, i", i()
  2. Cambiar exactamente lo que necesitas
  3. Repetir con . si es necesario

🚨 Errores comunes

1. Entrar en Insert demasiado pronto

  • Problema: i + navegar con flechas en Insert
  • Solución: Navegar en Normal, luego i exactamente donde necesitas

2. No usar objetos de texto

  • Problema: Navegar carácter por carácter para borrar
  • Solución: diw, da", ci( etc.

3. No usar el comando punto

  • Problema: Repetir manualmente cambios idénticos
  • Solución: Pensar en "repetibilidad" al hacer ediciones

🎯 Metas de dominio

Cuando domines este capítulo deberías poder:

  • Cambiar cualquier palabra en 2-3 teclas (cw)
  • Borrar líneas completas instantáneamente (dd)
  • Usar objetos de texto naturalmente (diw, ci")
  • Repetir acciones eficientemente (.)
  • Editar sin pensar en los comandos

🔜 ¿Qué sigue?

En el próximo capítulo aprenderemos los comandos esenciales de Vim y construiremos tu primera configuración personalizada.


💡 Tip pro: La edición en Vim es como tocar piano. Al principio piensas en cada nota, pero eventualmente tocas melodías sin pensar en dedos individuales.

🎯 Objetivo del capítulo: Editar texto fluidamente usando la gramática de Vim (verbo + objeto).