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|ssage
a
→ Insertar aquí:const mes|sage
I
→ Insertar aquí:|const message
A
→ 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
c
decalculate
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
),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:
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 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:
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
i
deitem
cw
(change word)- Escribe
li
Esc
- Busca siguiente
item
con/item
- Presiona
n
para 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
user
de la primera línea cw
+person
+Esc
- Busca siguiente con
/user
n
para ir al siguiente.
para repetir cambio
Ejercicio 2: Objetos de texto
def calculate(price, tax, discount):
total = (price + tax) - discount
return total
Tareas:
- Cambia
calculate
acompute
usandocw
- Borra el parámetro
discount
usandoda,
(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
+b
para buscar 'blue'cw
para 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
n
para 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
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).