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