Cómo escribir en VI el caracter “ESC” y el “retorno de carro”

Aun no he contado cómo utilizar macros, pero esto es muy útil precisamente para esas macros.

Para escribir en el texto que estamos editando (estamos en alguno de los modos de edición) el carácter “ESC” o el retorno de carro, hay que hacer esto:

  • ESC (^[):  hay que escribir “ctrl+v <ESC>“. Primero se pulsa “ctrl+v” y luego se pulsa la tecla “ESC”. Si “ctrl+v” está mapeado para alguna función como pegar texto, se puede usar en su lugar “ctrl+q“.
  • Retorno de carro (^M): hay que escribir “ctrl+v <enter>“. Igual que antes, si el “ctrl+v” está mapeado, se usa “ctrl+q“.

Pronto más cosas sobre vi.

Más info: aqui

Introducción a VI

El VI es un editor de texto que apareció en los sistemas UNIX, fundamentalmente para editar código. Es importante saber cómo se maneja el VI si tienes que trabajar con servidores UNIX de cualquier tipo, porque si hay algún editor instalado en UNIX, suele ser VI.

Nada más arrancar, VI está en modo comando. En este modo no se puede meter texto como se esperaría poder hacer en un editor, pero se pueden hacer otras muchas cosas que veremos luego.

Estando en modo comando, podemos pasar a modo “edición” de varias formas, pulsando alguno de los siguientes caracteres:

  • a (append): después de pulsar la tecla “a”, podremos insertar texto a la derecha de donde se encontraba el cursor.
  • A (Append): si pulsamos “shift+a” (a mayúscula), podremos insertar texto después del último caracter de la línea en la que estaba el cursor.
  • i (insert): se insertará texto en la misma posición del cursor.
  • I (Insert): se insertará texto en el primer carácter de la línea en la que está el cursor.
  • o (open): se insertará una línea vacía debajo de la que tuviera el cursor.
  • O (Open): se insertará una línea vacía encima de la que tuviera el cursor.

En cualquiera de estos modos de edición se podrá escribir texto como en cualquier otro editor visual del estilo del word, y volveremos al modo comando pulsando “ESC”.

Los modos de edición valen para escribir texto, pero las cosas interesantes que hace VI, se hacen todas en modo comando.

En modo comando, cada tecla que se toque hace algo, ejecuta un comando.

Vamos a ver los comandos más importantes.

Guardar y salir:

Cuando hemos entrado por primera vez en VI, el primer problema es cómo salir. Si estamos en windows con VIM (VI iMproved), podemos pinchar con el ratón en el típico botón de la “X”. Pero en UNIX, sobre todo en una consola de texto, ese botón no existe. Así que en realidad, estos comandos son los primeros que hay que aprender.

  • :w<enter>: guarda el fichero que se esté editando, siempre que ya existiera en el disco duro.
  • :w!<enter>: en algunos casos (p.e. el fichero es de sólo lectura, pero nosotros somos los dueños), “:w<enter>” da un mensaje de error y no guarda. Podemos intenter forzarle con la “!”.
  • :w <nombre_de_fichero><enter>: guarda el fichero, con el nombre indicado.
  • :q<enter>: sale del vi.
  • :q!<enter>: si hemos modificado el fichero y no se ha guardado, “:q<enter>” da un mensaje y no cierra el vi. En este caso, hay que forzarle con la “!” y saldrá sin guardar los cambios.
  • :wq!: guarda y sale, forzando el guardado.
  • :wqall!: guarda y sale de todos los ficheros que se estén editando, forzando que se guarden todos. Luego veremos esto de editar varios ficheros a la vez.

Desplazar el cursor:

Casi todos los comandos afectan al texto sobre el que está el cursor, por lo que hay que saber cómo moverse por el texto.

  • flechas: las teclas de cursor desplazan el cursor sobre el texto en la dirección que indican. Normalmente. Antiguamente no existían estas teclas y se usaban otras…
  • h: cursor a la izquierda.
  • j: cursor abajo.
  • k: cursor arriba.
  • l: cursor a la derecha.
  • 0 (cero): cursor al principio de la línea.
  • $: cursor al final de la línea.
  • gg: cursor al principio del fichero (primer caracter de la primera línea).
  • G (shift+g): cursor al final del fichero (primer caracter de la última línea).
  • ctrl+f (forward): desplaza el cursor una página hacia abajo en el fichero.
  • ctrl+b (backward): desplaza el cursor una página hacia arriba en el fichero.

Borrar:

  • x: borra el carácter que esté debajo del cursor.
  • dd: borra la línea en la que esté el cursor.

Buscar:

  • /<expresion_regular><enter>: pone el cursor en la primera ocurrencia de <expresion_regular> en el fichero hacia la derecha y hacia abajo (p.e. /asdf<enter> busca “asdf” del cursor en adelante).
  • ?<expresion_regular><enter>: pone el cursor en la primera ocurrencia de <expresion_regular> en el fichero hacia la izquierda y hacia arriba.
  • n: repite la última busqueda realizada, en el sentido que se haya realizado.

Reemplazar:

  • r<caracter>: reemplaza el caracter bajo el cursor por el que se teclee a continuación de la”r” (p.e. “ra” cambia el caracter bajo el cursor por una “a”).
  • c<desplazamiento>: borra el texto desde el cursor hasta donde indique el comando de desplazamiento y nos pone en modo inserción, del que se saldrá pulsando “ESC” (p.e. “c$” borra desde el cursor al final de línea, “cG” borra desde la línea del cursor al final del fichero).
  • :%s/<expresion_regular>/<texto>/: cambia todas las ocurrencias de <expresion_regular> en el fichero (sólo una por línea), por <texto>. Para que se cambien todas las ocurrencias de <expresión_regular> aunque haya varias por línea, hay que añadir una “g” al final (p.e. si tenemos una línea “asdf qwer qwer zxcv” y ejecutamos “:%s/asdf/Z/g”, la línea quedará así “Z qwer Z zxcv”. Si no ponemos la “g” final, quedará “Z qwer asdf zxcv”).

Editar varios ficheros a la vez:

Si hemos abierto varios ficheros a la vez (p.e. con esto en la línea de comandos de UNIX “# vi 1.txt 2.txt”), VI los abre todos pero sólo nos enseña el primero. Podemos decirle que nos muestre todos a la vez, dividiendo la pantalla en varios trozos. También se pueden abrir nuevos “trozos de ventana” con otros ficheros, o volver a dejar el fichero actual en pantalla completa.

  • :all<enter>: muestra todos los ficheros que se estén editando a la vez, cada uno en un trozo de la pantalla.
  • :ctrl(ww): esto es pulsar “w” dos veces seguidas mientras se mantiene pulsada la tecla “ctrl”. Cambia el cursor del fichero que se esté editando al siguiente. Cuando llega al último, pasa de nuevo al de más arriba.
  • :ctrl+w<flecha_arriba_o_abajo>: esto es, pulsar “ctrl+w”, y una vez soltado el “ctrl”, pulsar la flecha hacia arriba o acia abajo. Cambia el cursor al fichero que esté encima (flecha arriba) o debajo (flecha abajo) del que tuviera el cursor.
  • :split <nombre_de_fichero>: abre un nuevo trozo de ventana con el fichero indicado.
  • :only: pone el fichero actual en pantalla completa. El resto de los ficheros siguen ahi, pero no los vemos. Podemos volver a usar “:all<enter>” para verlos todos juntos.
  • :new: abre un nuevo fichero sin nombre.

_

A muchos de los comandos comentados, se les puede anteponer un número, que indicará el número de veces que hay que ejecutar el comando (p.e. “10x” borra 10 veces el caracter bajo el cursor, y “10dd” borra 10 veces la línea que está bajo el cursor).

Esto es un resumen de comandos. Hay más, y más combinaciones. Aprender vi no es fácil, pero una vez dominado, cualquier otro editor se queda corto de funcionalidades 😉

En próximos posts, iré añadiendo cosas interesantes como los buffers, y las macros.

Más info sobre expresiones regulares: aqui

Más info: en google… :)