Saltar al contenido principal

104. Movimientos básicos: h, j, k, l y más 🏃

La base de todo en Vim

Si hay algo que debes dominar completamente en Vim son los movimientos. A diferencia de otros editores donde navegas principalmente con el mouse y las flechas, en Vim la navegación con teclado es el corazón de la productividad.

🕹️ Los movimientos fundamentales

Las teclas hjkl (el núcleo)

    k

h ← + → l

j
TeclaDirecciónMnemotécnico
h← Izquierdaheft (izquierda en inglés)
j↓ Abajoj parece una flecha hacia abajo
k↑ Arribak está arriba de j
l→ Derechaleft contrario, o last

¿Por qué hjkl y no las flechas?

  1. Eficiencia: Tus dedos nunca salen de la fila principal
  2. Historia: En las máquinas ADM-3A (donde se creó vi) estas teclas tenían flechas
  3. Velocidad: Una vez que lo dominas, es mucho más rápido
  4. Disponibilidad: Funciona en cualquier teclado, incluso sin flechas

🏃‍♂️ Movimientos por palabra

ComandoAcciónEjemplo
wSiguiente palabrahello world → cursor de h a w
bPalabra anteriorhello world → cursor de w a h
eFinal de palabra actualhello world → cursor de h a o
ComandoAcciónDiferencia
WSiguiente PALABRAIgnora signos de puntuación
BPALABRA anteriorhello-world.js es una PALABRA
EFinal de PALABRAhello.world → cursor va al final

Ejemplo práctico:

const myFunction = (param1, param2) => {

- `w`: const → my → Function= ( → param1 → , → param2 → )=>{
- `W`: const → myFunction → = (param1, → param2) =>{

📏 Movimientos por línea

ComandoAcciónUso común
0Inicio de líneaIr al primer carácter
^Primer carácter no-blancoIgnorar indentación
$Final de líneaIr al último carácter
g_Último carácter no-blancoIgnorar espacios finales

Ejemplo visual:

    const message = "Hello World";     
^ ^ ^ ^
| | | |
| primer no-blanco (^) | final de línea ($)
| último no-blanco (g_)
inicio de línea (0)

🖼️ Movimientos por pantalla

ComandoAcciónDescripción
HTop de pantallaHigh
MMedio de pantallaMiddle
LBottom de pantallaLow

Scroll de pantalla

ComandoAcciónPáginas
Ctrl+fPágina abajoForward
Ctrl+bPágina arribaBackward
Ctrl+dMedia página abajoDown
Ctrl+uMedia página arribaUp

Centrar pantalla

ComandoAcciónUso
zzCentrar línea actualVer contexto
ztLínea actual al topVer qué viene después
zbLínea actual al bottomVer qué vino antes

🎯 Movimientos por archivo

ComandoAcciónAlternativa
ggInicio del archivo1G
GFinal del archivo:$
{número}GIr a línea número:{número}
{número}ggIr a línea númeroMismo que arriba

Ejemplos:

5G          " Ir a línea 5
42gg " Ir a línea 42
:100 " Ir a línea 100

🔍 Búsqueda en la línea actual

Find (buscar)

ComandoAcciónEjemplo
f{char}Buscar carácter hacia adelantef( busca siguiente (
F{char}Buscar carácter hacia atrásF( busca anterior (
t{char}Hasta carácter hacia adelantet( va antes del (
T{char}Hasta carácter hacia atrásT( va después del (

Repetir búsquedas

ComandoAcción
;Repetir última búsqueda f/F/t/T
,Repetir en dirección opuesta

Ejemplo práctico:

function calculateTotal(price, tax, discount) {

Si el cursor está al inicio:

  • f( → va al primer paréntesis
  • f, → va a la primera coma
  • ; → va a la segunda coma
  • F( → regresa al paréntesis

🧮 Modificadores numéricos

Cualquier movimiento puede ser precedido por un número:

ComandoAcción
3wAvanzar 3 palabras
5jBajar 5 líneas
2f,Buscar la segunda coma
10hIr 10 caracteres a la izquierda

💪 Ejercicio práctico

Abre un archivo de código existente y practica estos movimientos:

Ejercicio 1: Navegación básica

  1. Usa solo hjkl durante 10 minutos
  2. No uses las flechas del teclado
  3. Navega por todo el archivo

Ejercicio 2: Movimientos por palabra

const users = ['alice', 'bob', 'charlie'];
const admin = users.find(user => user.role === 'admin');
  1. Posiciona el cursor al inicio de la primera línea
  2. Usa w para ir palabra por palabra
  3. Usa b para regresar
  4. Prueba W y B para ver la diferencia

Ejercicio 3: Búsqueda en línea

.container { margin: 10px; padding: 20px; border: 1px solid #ccc; }
  1. Ve al inicio de la línea con 0
  2. Usa f: para ir al primer :
  3. Usa ; para ir al siguiente :
  4. Usa F. para regresar al punto anterior

🎮 Modo de práctica diaria

Día 1-3: Básicos

  • Solo hjkl (nada de flechas)
  • w, b, e para palabras
  • 0, $ para líneas

Día 4-7: Intermedio

  • f, F, t, T con repetición ;, ,
  • H, M, L para pantalla
  • Números con movimientos (3w, 5j)

Día 8+: Avanzado

  • Combinaciones fluidas
  • gg, G para archivo
  • Ctrl+f, Ctrl+b para páginas

🚨 Errores comunes

1. Volver a las flechas

  • Problema: Usar flechas cuando hjkl es difícil
  • Solución: Desactiva las flechas en tu .vimrc:
" Desactivar flechas en modo normal
nnoremap <Up> <Nop>
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>

2. No usar modificadores numéricos

  • Problema: jjjjj en lugar de 5j
  • Solución: Conscientemente cuenta y usa números

3. No practicar f/F/t/T

  • Problema: Solo usar w y b
  • Solución: Forzarte a usar búsqueda en línea

🎯 Benchmark de velocidad

Cuando domines los movimientos deberías poder:

  • Ir a cualquier palabra visible en ~2 movimientos
  • Navegar un archivo de 100 líneas en ~5 segundos
  • Moverte sin pensar conscientemente en las teclas

🔜 ¿Qué sigue?

En el próximo capítulo aprenderemos la edición básica: cómo insertar, borrar y cambiar texto de manera eficiente usando los movimientos que acabamos de aprender.


💡 Tip pro: Los primeros días serán frustrantes. Es normal. Después de una semana será natural, y después de un mes serás más rápido que con el mouse.

🎯 Objetivo del capítulo: Navegar fluidamente por cualquier archivo usando solo el teclado.