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
| Comando | Acción | Cuándo usarlo |
|---|---|---|
i | Insert antes del cursor | Insertar en posición exacta |
a | Insert después del cursor (append) | Añadir después de carácter |
I | Insert al inicio de línea | Añadir al principio |
A | Insert al final de línea | Añadir al final |
o | Nueva línea abajo | Crear línea nueva |
O | Nueva línea arriba | Insertar línea antes |
Ejemplo visual:
const message = "Hello";
^
cursor aquí
i→ Insertar aquí:const me|ssagea→ Insertar aquí:const mes|sageI→ Insertar aquí:|const messageA→ Insertar aquí:const message = "Hello";|
Edición especializada
| Comando | Acción | Descripción |
|---|---|---|
s | Substitute carácter | Borra carácter y entra en Insert |
S | Substitute línea | Borra línea completa y entra en Insert |
C | Change hasta final | Borra desde cursor al final de línea |
✂️ Borrar texto
Borrado básico
| Comando | Acción | Equivalente |
|---|---|---|
x | Borrar carácter actual | dl |
X | Borrar carácter anterior | dh |
dd | Borrar línea completa | - |
D | Borrar hasta final de línea | d$ |
Borrado con movimientos
La fórmula es: d + {movimiento}
| Comando | Acción | Descripción |
|---|---|---|
dw | Borrar palabra | Desde cursor hasta inicio siguiente palabra |
de | Borrar hasta final de palabra | No incluye el espacio |
db | Borrar palabra hacia atrás | Útil en mitad de palabra |
d$ | Borrar hasta final de línea | Igual que D |
d0 | Borrar hasta inicio de línea | Desde cursor al inicio |
dgg | Borrar hasta inicio de archivo | Todo desde cursor hacia arriba |
dG | Borrar hasta final de archivo | Todo desde cursor hacia abajo |
Ejemplo práctico:
const userName = "alice_smith_123";
^
cursor aquí
dw→const userName = ";(borra hasta el siguiente espacio)de→const 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:
| Comando | Acción | Equivalente a |
|---|---|---|
cw | Cambiar palabra | dw + i |
ce | Cambiar hasta final de palabra | de + i |
cc | Cambiar línea completa | dd + o |
C | Cambiar hasta final de línea | D + A |
c$ | Cambiar hasta final de línea | Igual que C |
Ejemplo de workflow:
def calculate_price(amount):
return amount * 1.21
Para cambiar calculate_price a calculate_total:
- Posiciona cursor en
cdecalculate cw(change word)- Escribe
calculate_total Esc
📋 Copiar y pegar
Copiar (yank)
| Comando | Acción | Descripción |
|---|---|---|
yy | Copiar línea completa | Más común |
Y | Copiar línea completa | Igual que yy |
yw | Copiar palabra | Desde cursor hasta siguiente palabra |
ye | Copiar hasta final de palabra | Sin incluir espacio |
y$ | Copiar hasta final de línea | - |
yG | Copiar hasta final de archivo | - |
Pegar (put)
| Comando | Acción | Cuándo usar |
|---|---|---|
p | Pegar después del cursor | Para caracteres/palabras |
P | Pegar antes del cursor | Para líneas completas |
Comportamiento inteligente:
- Si copiaste una línea completa (
yy),ppega en la línea de abajo - Si copiaste parte de línea (
yw),ppega después del cursor
🔢 Modificadores numéricos
Todos los comandos pueden llevar números:
| Comando | Acción |
|---|---|
3dd | Borrar 3 líneas |
5dw | Borrar 5 palabras |
2yy | Copiar 2 líneas |
4p | Pegar 4 veces |
🔄 Deshacer y rehacer
| Comando | Acción | Descripción |
|---|---|---|
u | Deshacer | Undo |
Ctrl+r | Rehacer | Redo |
U | Deshacer todos los cambios en línea | Restaurar 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 uen 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:
| Objeto | Descripción | Ejemplo |
|---|---|---|
w | palabra | diw = borrar palabra |
s | oración | das = borrar oración |
p | párrafo | dap = borrar párrafo |
" | entre comillas dobles | di" = borrar contenido |
' | entre comillas simples | ci' = cambiar contenido |
( o ) | entre paréntesis | da( = borrar incluyendo ( ) |
[ o ] | entre corchetes | ci[ = cambiar contenido |
{ o } | entre llaves | da{ = borrar incluyendo |
Ejemplos prácticos:
function greet(name) {
console.log("Hello " + name + "!");
}
Con cursor en cualquier parte de la función:
di(→ borraname(dentro de paréntesis)da(→ borra(name)(alrededor de paréntesis)di"→ borraHello+ 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>:
- Posiciona cursor en
ideitem cw(change word)- Escribe
li Esc- Busca siguiente
itemcon/item - Presiona
npara ir al siguiente - Presiona
.para repetir el cambio - 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_:
- Posiciona cursor en
userde la primera línea cw+person+Esc- Busca siguiente con
/user npara ir al siguiente.para repetir cambio
Ejercicio 2: Objetos de texto
def calculate(price, tax, discount):
total = (price + tax) - discount
return total
Tareas:
- Cambia
calculateacomputeusandocw - Borra el parámetro
discountusandoda,(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:
f+bpara buscar 'blue'cwpara cambiar palabra- Escribe
#3498db
🎮 Patrones de edición eficientes
Patrón 1: Cambio múltiple
- Hacer el cambio una vez
- Buscar siguiente ocurrencia (
/o*) - Usar
npara navegar - Usar
.para repetir
Patrón 2: Edición en bloque
- Seleccionar múltiples líneas (Visual mode - próximo capítulo)
- Aplicar comando a todas (
c,d,>,<)
Patrón 3: Edición precisar
- Usar objetos de texto (
iw,i",i() - Cambiar exactamente lo que necesitas
- 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
iexactamente 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).