Cuando estamos por consola en un servidor y no podemos usar nuestra interfaz gráfica favorita, Vi o Vim (Vi Mejorado) se convierten en una herramienta indispensable.
Vim, hace un consumo de memoría excelente, y si conocemos todos los comandos para navegar con él, pronto nos resultará bastante atractivo.

Lo que más nos choca cuando nos iniciamos en vim, es que tengas que cambiar entre diferentes modos. El hecho de que exista un modo para escibir, es lo que hace que puedan existir confusiones al usarlo.

Sin embargo, cuando los dominas, son una de las grandes bondades del programa.
Aunque una vez los dominamos, nos encontramos con que es uno de los mejores beneficios del programa.

Modo comandos: aparece por defecto. En este modo podremos efectuar acciones como copiar/pegar y formatear el texto. Desde cualquier modo se puede acceder a él pulsando dos veces la tecla ESC.
Modo inserción: todo lo que teclee aparecerá en pantalla y se convertirá en parte integrante de su buffer de archivo.
Modo ex: para grabar un archivo o abrir otro y operaciones relacionadas.
Modo visual: permite cortar, copiar y pegar expeditivamente grandes porciones de texto mediante teclado o ratón.
Como la interfaz se basa en consola, la interacción con el teclado es vital. Veamos para qué sirve cada tecla, dividiendo su funcionalidad en grupos.

Movimiento del cursor

h: mover izquierda
j: mover abajo
k: mover arriba
l: mover derecha
w: salta de palabra en palabra al comienzo de las mismas 
    (la puntuación es considerada palabra)
W: salta de palabra en palabra (al espacio entre ellas)
e: salta de palabra en palabra al final de las mismas 
    (la puntuación es considerada palabra)
E: salta al final de las palabra (sin considerar puntuación)
b: salta hacia atrás entre palabras (considerando la puntuación)
B: salta hacia atrás entre palabras (sin considerar puntuación)
0: al comienzo de la línea
^: primer carácter no blanco de la línea
$: final de la línea
G: comando ir a

Modo inserción (insertando/añadiendo texto)

i: empieza modo inserción donde está el cursor
I: empieza modo inserción al comienzo de la línea
a: añade donde está el cursor
A: añade al final de línea
o: añade nueva línea en blanco, bajo la línea actual
O: añade nueva línea en blanco, sobre la línea actual
ea: añade al final de la palabra
Esc: sale del modo

Edición

r: reemplaza un único carácter
J: une la línea de abajo con la actual
cc: reemplaza una línea entera
cw: reemplaza hasta el final de la palabra
c$: reemplaza hasta el final de la línea
s: borra el carácter que indica el cursor y substituye el texto
S: borra la línea y substituye el texto (lo mismo que cc)
xp: transpone dos letras (primero corta, luego pega)
u: deshace (undo)
.: repite el último comando

Marcando texto (modo visual)

v: comenzar modo visual
V: comenzar modo visual lineal
o: moverse a otra área marcada
Control+v: comenzar bloque de modo visual
O: moverse a la esquina de otro bloque marcado
aw: marcar una palabra
ab: marca un bloque delimitado por paréntesis (del inglés braces)
aB: marca un bloque delimitado por llaves (del inglés brackets)
ib: marca dentro de un bloque delimitado por paréntesis
iB: marca dentro de un bloque delimitado por llaves
Esc: salir del modo visual

Comandos visuales

>: corre el texto hacia la derecha
<: corre el texto hacia la izquierda
y: copia el texto marcado
d: borra el texto marcado

Cortar y pegar

yy: copia una línea
2yy: copia dos líneas
yw: copia una palabra
y$: copia hasta el final de la línea
p: copia el contenido del portapapeles, tras el cursor
P: ídem pero antes del cursor
dd: borra una línea
dw: borra una palabra
x: corta el carácter actual

Salir
Todas llevan dos puntos al comienzo, los del final son de separación pero no del comando en sí. Esto mismo pasará en los siguientes apartados.

:w: guarda el fichero pero no sale
:wq: guarda el fichero y sale
:q: intenta salir. Si hay cambios da error, en caso contrario, sale
:q!: sale sin guardas y aunque haya habido cambios

Buscar y reemplazar

/pattern: busca un patrón
?pattern: busca un patrón hacia atrás
n: repite la búsqueda en la misma dirección
N: repite la búsqueda en la dirección opuesta
:%s/viejo/nuevo/g: reemplaza todo lo que encuentra definido 
    por “viejo” por “nuevo”
:%s/viejo/nuevo/gc: lo mismo, pero con confirmaciones

Trabajar con múltiples ficheros

:e nombreFichero: edita un fichero en un nuevo buffer
:bnext (o :bn): se dirige al siguiente buffer
:bprev (o :bp): se dirige al bufer anterior
:bd: borra un buffer
:sp nombreFichero: abre un fichero en un nuevo buffer y lo divide
Control+ws: divide la ventana
Control+ww: intercambia la ventana
Control+wq: cierra una ventana
Control+wv: divide la ventana horizontalmente