Temporada 01: iniciándose en Vim

09. Vim: registros

Publicado por

Cuando traté el tema sobre edición, hablamos sobre cortar, copiar y pegar texto, obviando, entre otra cosas, a dónde va el texto que copiamos, o cortamos. Bueno, creo que ha llegado el momento de hablar del equivalente al clipboard dentro de Vim.

Dentro del editor no tenemos solo un portapapeles, tenemos varios, y Vim los llama registros. La forma de referirse a ellos dentro del editor es utilizar el símbolo de comillas dobles (") como prefijo del nombre del registro. También se les puede tratar como si fueran variables, con la finalidad de modificar su contenido en modo Línea de comados; esto se logra usando el símbolo arroba (@) como prefijo del registro.

El contenido de los registros puede ser desplegado a través del comando :reg[isters] {arg} donde {arg} es el nombre del registro cuyo contenido se quiere consultar. En caso de que no se le proporcione ningún atributo al comando, este desplegará el contenido de todos los registros modificados hasta ahora.

Si has estado utilizando activamente el editor, es muy probable que ya hayas modificado directa o indirectamente algunos de los registros, por lo que la salida del comando puede que te muestre algunas cosas raras. El objetivo de esta nota es que al terminar de leerla, esas rarezas no lo sean más.

El registro sin nombre

Este es el registro por defecto que utiliza el editor. Cualquier texto que se copie, corte o elimine va a parar a él. Para acceder al contenido de este registro, se puede teclear dos veces el símbolo de comillas dobles ("") aunque esto no es necesario pues este es también el registro por defecto; de modo que ""p es equivalente a ejecutar solamente p.

El registro de búsqueda

Sin ningún misterio, este registro lo que almacena es el patrón de búsqueda utilizado más recientemente. Este registro es utilizado para brincar desde una ocurrencia del patrón a la siguiente y de regreso (comandos n y N), así como para resaltar con un color diferente todas las ocurrencias del patrón.

Los registros numerados

Estos son registros numerados del cero al nueve y que constituyen una pila, cuyo tope es el registro cero ("0) y su fondo el registro "9. Vim guarda en esta pila todo lo que pasa por el registro sin nombre, almacenando en <"0 el texto copiado o cortado más recientemente. Esta funcionalidad puede entenderse como una especie de historial del portapapeles.

Los registros con nombre

Estos son veintiséis registros a tu disposición cada uno de ellos mapeado a una de las letras en el teclado. Utiliza las letras minúsculas a-z para reemplazar el contenido actual del registro, por ejemplo: "ayiw copia la palabra bajo el cursor en el registro a. O bien, utiliza las letras mayúsculas A-Z para agregar texto al contenido actual del registro: "Adi( corta el texto entre paréntesis y lo agrega al registro a. A diferencia de los tipos anteriores, los registros con nombre solamente almacenarán la información que tú indiques cuando lo indiques.

Registros
Almacenando texto en registros.

El registro para textos pequeños

Este registro "-, contiene el texto de comandos que copiaron o cortaron menos de una línea, por ejemplo: x, dw, y0 a menos que el texto sea enviado a otro registro explícitamente, por ejemplo con: "ayiw para copiar la palabra bajo el cursor y guardarla en el registro a.

Los registros de solo lectura

Como podrás deducir gracias a su nombre, el contenido de estos registros no puede ser modificado por el usuario. Solamente podrás consultar su contenido o bien, pegarlo en el buffer. Estos registros se llaman ., %, # y :. Y respectivamente contienen:

".: El último texto que haya sido insertado en el buffer.

"%: El nombre del archivo cargado en el buffer actual.

"#: El nombre del archivo cargado en el buffer presentado anteriormente. Esto cuando se esté trabajando con al menos dos archivos a la vez.

":: La línea de comandos ejecutada más recientemente.

El registro de expresión

Este es llamado = y a diferencia de lo que hemos visto hasta ahora. El registro de expresión no almacena texto propiamente. De hecho es, de cierto modo, también un registro de solo lectura, por lo que no te es permitido modificarlo de manera directa. Al llamar al registro, tecleando "= en modo -- NORMAL -- en la parte inferior de la ventana aparecerá un símbolo de igual (=) solicitando al usuario que ingrese texto. El texto que el editor te solicita es una expresión.

Luego entraré en más detalles de lo que es una expresión, pues es un tema más de scripting y escapa al alcance de esta nota, por ahora ilustraré este punto con expresiones aritméticas. Pero si te sientes curioso puedes consultar la ayuda de Vim: :help 41.3.

Si en este punto ingresas una operación aritmética, y presionas <CR>, el resultado de esa operación será insertado en el buffer.

Los registros de selección

Estos registros nos ayudan a recuperar información contenida en el portapapeles del modo gráfico (X11 en el caso de los usuarios de Linux, BSD, etc.). Si has intentado copiar texto desde, digamos, el navegador web utilizando <C-c> y lo has querido pegar en la terminal, habrás notado que la combinación de teclas <C-v> no funciona; debido a que la combinación de teclas para pegar texto es diferente: presionar al mismo tiempo, las teclas Ctrl, Shift e Ins (<C-M-Nis>). Claro que esta combinación solo funciona en Vim si está en modo -- INSERTAR --. Si por alguna razón el portapapeles no nos permitiera pegar el texto utilizando la combinación de teclas, el editor nos proporciona el registro "+ de modo que si copias texto desde una aplicación gráfica, podemos incluirlo en el buffer mediante el comando p de esta forma: "+p.

Si utilizas Linux sabrás que lo único que necesitas para copiar texto en modo gráfico, es seleccionarlo. Y para pegarlo en donde quieres, hay que hacer clic con el botón central del ratón (en algunos modelos este botón es la rueda de scroll). Pues bien, dado que Vim está pensado para funcionar sin necesidad de ratón, también existe un modo de darle la vuelta a este clic: el registro "*. Por lo tanto, para pegar el texto seleccionado, solo necesitas pegar dicho registro en el buffer: "*p.

Otra manera de copiar texto en el buffer de trabajo, es simplemente arrastrarlo con el ratón y soltarlo sobre la ventana del editor. Al hacer esto, el texto que sueltes será insertado en el buffer y además será copiado en el registro "~.

El agujero negro

Este no es propiamente un registro. Es el equivalente al dispositivo /dev/null en Linux: en realidad no almacena nada. Todo lo que se mande a este registro llamado "_ simplemente se descarta, y la ventaja es que no afecta a ninguno de los demás registros, por lo que es un buen lugar para mandar texto que ya no te interesa.

Espero que esta información te sea de utilidad. Si quieres aprender más acerca de cómo utilizar los registros para manipular texto, te recomiendo que consultes la sección :help copy-move del manual de Vim. En la siguiente nota seguiré profundizando sobre registros a través de un tema relacionado y sumamente poderoso: macros. Hasta entonces.

3 comments

  1. disculpa pero no se cuál es la tecla , en el registro de expresión dices que hay que pulsar cuál es .
    Por cierto buen post me ha ayudado bastante, gracias.

    1. Hola,

      Disculpa la tardanza en contestar. Tal vez abusé de la notación, al no explicar esto anteriormente. En el contexto de Vim, la tecla o caracter coresponde a la tecla o . Se escribe “CR” por las siglas en inglés para “Retorno de carro” (car return), en referencia a las máquinas de escribir y los teletipos de las primeras terminales.

      ¡Saludos y gracias por comentar!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *