Este es uno de los capítulos del tutorial Vim, un editor atemporal. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Vim es un caso especial. En lugar de tener un solo portapapeles tiene varios portapapeles, en concreto 48 portapapeles, aunque en el argot de Vim, se les llama registros. Pero, por resumir, y tal y como te indico, Vim tiene muchos portapapeles. ¿Te puedes hacer una idea de las posibilidades que te ofrece tener varios portapapeles en lugar de uno? En cada uno de esos portapapeles, puedes guardar la información que necesites para utilizarla posteriormente, una o varias veces. No estás supeditado a utilizar un gestor del portapapeles para poder trabajar con mayor comodidad, simplemente cada parte la pegas en un portapapeles.

Los registros de Vim o sus 48 portapapeles

Como te decía en la introducción estos portapapeles, en realidad, se conocen como registros. Se trata de una especie de portapapeles, un lugar en la memoria que te permite guardar texto. Vim tiene diferentes tipos de registros. Algunos de ellos los rellena de forma automática, como ya has podido observar, en las operaciones de copiar y pegar dentro del propio Vi. Otros de estos registros están libres, para que sea el usuario el que se encargue de rellenarlos con el contenido que considere de su interés.

Tipo de registros

Vim tiene diferentes tipos de registros, todos los registros comienzan por " , un registro puede ser "0 . Así, los registros son los siguientes,

"" el registro por defecto

el registro por "0 a "9 registros numéricos

a registros "- el pequeño registro borrar

el registro borrar "a a "z registros nominales

a registros ": , ". , "% , "# registros de solo lectura

, , , registros de solo "= el registro de las operaciones matemáticas

el registro de las operaciones "* , "+ , "~ los registros del portapapeles

, , los registros del "_ el registro agujero negro

el registro "/ el registro de las búsquedas

¿como utilizar lo registros de Vim?

Voy con un ejemplo que siempre es mas sencillo. Si quieres copiar una línea completa, simplemente tienes que utilizar yy . Ya la tienes en un registro de Vim. Sin embargo, si intentas pegar, como si lo tuvieras en el portapapeles, te darás cuenta de que no pegas nada, o bien pegas algo que ya tenías anteriormente, pero en ningún caso lo que acabas de copiar con yy .

Como sabes, si lo que quieres es pegar en Vim, tendrás que utilizar p.

El registro por defecto

Cuando no indicas ningún registro, lo cierto es que lo estás enviando al registro por defecto a "" . Es decir, es totalmente equivalente que hagas yy que utilices ""yy . Evidentemente esta segunda opción es bastante menos productiva que la primera, con lo que, no es necesario que te diga, que no utilices esta última. Cuanto mas sencillo, siempre mejor.

Utilizando los registros nominales y numerados

De la misma forma, si quieres copiar a alguno de los registros numéricos o alguno de los registros nominales, es tan sencillo como utilizar "0yy o "ayy , por ponerte un ejemplo. De la misma manera, que en el ejemplo anterior, para pegar desde estos registros, sería exactamente igual que antes, "0p o "ap .

Aquí tengo que hacer una importante observación, y es que los registros nominales si bien los registros nominales "a y "A apuntan al mismo contenido, lo cierto es que al copiar no se comportan de la misma forma. Así cuando utilizas "ayy para copiar, se reemplaza el contenido del registro con lo que acabas de copiar. Por el contrario, si utilizas "Ayy , se añade lo que acabas de copiar al contenido existente en el registro.

Eso si, a la hora de pegar, dado que ambos apuntan al mismo contenido, ambos se comportan exactamente igual. Así, es totalmente igual que utilices "ap que "Ap .

Así, entre los registros numerados y los nominales, ya tienes un total de 36 registros. Es decir, 36 portapapeles para usar siempre que lo necesites.

Evidentemente, esto puede ser un verdadero problema, porque ¿que he guardado en cada registro? Es muy posible, que si utilizas muchos registros, llegue un momento que no sepas ¿que está donde?. Sin embargo, simplemente tienes que utilizar el comando :registers para ver los registros que tienes ocupados y su contenido.

De la misma forma, si quisieras ver el contenido de un registro concreto, como puede ser el "a , simplemente utiliza el comando :registers a o :reg a . Igualmente si quieres ver el contenido de dos o mas registros, por ejemplo :reg 0 a b . Si alguno de los registros no tiene contenido, simplemente no lo mostrará.

Por último, indicarte que al igual que haces al copiar texto, también el comportamiento es el mismo cuando utilizas el resto de verbos, como cambiar, borrar, sustituir o cortar, siguiendo las indicaciones del capítulo sobre el lenguaje de Vim. Es decir, cuando utilizas ciw para modificar una palabra, esta como sabes se copia al registro "" . Si precedes con el registro que quieras utilizar, la palabra irá a ese registro, en lugar de ir al registro por defecto. Por ejemplo, si quieres hacer la operación con el registro "a , la operación sería "aciw .

Un registro numerado especial

Dentro de los numerados hay uno que tiene un comportamiento especial, se trata de "0 . Este registro almacena lo último que hayas copiado. Sin embargo, este registro no se ve modificado por otras operaciones. Es decir, si copias una palabra utilizando yiw , esta va a los registros "" y "0 . Si utilizas el comando :registers , verás que ambos registros son iguales. Sin embargo, si utilizas diw , observarás que la palabra que acabas de borrar se encuentra en el registro "" , pero no se encuentra en el registro "0 .

Utilizando el portapapeles del sistema

Entonces, ¿como copiar al portapapeles del sistema? Utilizando el registro "+ . Es posible que dependiendo de tu entorno de escritorio necesites algún paquete para poder utilizarlo. Así, para copiar al portapapeles del sistema tienes que preceder la operación de copiar por "+ . Es decir, para copiar la línea en la que te encuentras al portapapeles del sistema tienes que utilizar "+yy .

Igualmente si lo que quieres es pegar lo que tengas en el portapapeles del sistema en Vim, simplemente tendrás que utilizar "+p . Sencillo, ¿verdad?.

Pero esto no es todo, porque en Linux, si seleccionar cualquier texto, esta selección va a un portapapeles del sistema llamada primario. Para pegar ese contenido, en Vim tienes que utilizar el portapapeles "* . Esto lo puedes probar de inmediato, simplemente selecciona con el ratón cualquier texto de atareao.es…, ya lo tienes copiado al portapapeles primario. Abre Vim, y lo pegas utilizando "*p .

Además de estos dos registros, existe el registro "~ . Este registro solo está disponible en el caso que esté utilizando Vim en su modalidad con interfaz gráfica. Este registro contiene lo último que hayas arrastrado y soltado. Esto lo puedes probar con GVim, arrastrando y soltando un texto en él. Posteriormente, lo puedes volver a pegar utilizando "~p .

En modo de inserción

Hasta el momento, todo lo que te has visto es para utilizar los registros en modo normal. Para utilizar los registros de la misma forma, pero en el modo de insertar, tienes que utilizar el atajo de teclado Ctrl+r seguido por el registro que quieras utilizar.

Así, por ejemplo si quieres pegar el contenido del registro "0 tendrás que utilizar Ctrl+r 0 , lo mismo para el caso del registro por defecto Ctrl+r " o para los portapapeles del sistema, ya sea el conoces siempre Ctrl+r + , como en el caso del primario Ctrl+r * .

Los cuatro registros de solo lectura

Existen cuatro registros de solo lectura, aunque alguno de ellos ya lo hemos visto anteriormente. Estos cuatro registros son ": , ". , "% , "# .

": se refiere al último comando que ejecutaste. Así por ejemplo, si lo último que hiciste fue ver el contenido de los registros, este registro contendrá registers . Esto último es probablemente muy meta.

se refiere al último comando que ejecutaste. Así por ejemplo, si lo último que hiciste fue ver el contenido de los registros, este registro contendrá . Esto último es probablemente muy meta. "% en este registro encontrarás la ruta con la que abriste el archivo que estás editando. Es decir, si utilizaste vim archivo.md , lo que encontrarás será archivo.md . Mientras que si lo que utilizaste fue vim ruta/archivo.md lo que encontrarás en ese registro será ruta/archivo.md . Yo utilizo este registro en particular, para copiar todo el contenido del archivo al portapapeles del sistema. Para copiar todo el contenido del archivo al portapapeles del sistema simplemente utiliza :%y+

en este registro encontrarás la ruta con la que abriste el archivo que estás editando. Es decir, si utilizaste , lo que encontrarás será . Mientras que si lo que utilizaste fue lo que encontrarás en ese registro será . Yo utilizo este registro en particular, para copiar todo el contenido del archivo al portapapeles del sistema. Para simplemente utiliza ". en este registro encontrarás lo último que insertaste.

en este registro encontrarás lo último que insertaste. "# es el nombre del archivo alterno. Esto del archivo alterno lo veremos en un capítulo posterior, así que ahora no le des mas importancia.

Los registros especiales

Hasta el momento he ido comentando sobre los diferentes registros. Registros nominales, registros numéricos,… Pero quedan algunos registros que no he mencionado hasta el momento. Así que vamos a abordarlos para evitar que te quedes con la curiosidad de saber de ellos.

"_ como he mencionado anteriormente, este es el registro conocido como el agujero negro . Este nombre lo tiene bien merecido, porque, todo lo que envías a este registro es descartado , es como utilizar enviar un archivo a /dev/null . A lo mejor inicialmente esto no tiene sentido para ti, pero si piensas que todo lo que borras se va al registro sin nombre, al registro por defecto a "" , entonces puede comenzar a tener sentido. Recuerda que al borrar una palabra o una frase, esto irá al registro sin nombre, si quieres evitarlo utiliza el registro agujero negro. Para probar su funcionamiento, puedes utilizar diw sobre una palabra. Con este comando, como sabes borrarás la palabra, pero esta irá al registro sin nombre. Si por el contrario, utilizas "_diw , la palabra que acabas de borrar no irá al registro sin nombre.

como he mencionado anteriormente, este es el registro conocido como . Este nombre lo tiene bien merecido, porque, , es como utilizar enviar un archivo a . A lo mejor inicialmente esto no tiene sentido para ti, pero si piensas que todo lo que borras se va al registro sin nombre, al registro por defecto a , entonces puede comenzar a tener sentido. Recuerda que al borrar una palabra o una frase, esto irá al registro sin nombre, si quieres evitarlo utiliza el registro agujero negro. Para probar su funcionamiento, puedes utilizar sobre una palabra. Con este comando, como sabes borrarás la palabra, pero esta irá al registro sin nombre. Si por el contrario, utilizas , la palabra que acabas de borrar no irá al registro sin nombre. "- este es el pequeño registro borrar . En este registro encontrarás todo lo que hayas borrado o modificado que tenga una longitud de una línea…

este es el . En este registro encontrarás todo lo que hayas borrado o modificado que tenga una longitud de una línea… "\ en este registro encontrarás la última búsqueda que realizaste

en este registro encontrarás la que realizaste "= utilizando este registro puedes realizar operaciones matemáticas. Si lo has leído bien. Lo puedes utilizar como una calculadora. Así desde el modo de normal escribe "=125+387/4 , pulsa enter y luego p para pegar, y verás que aparece 221 . Si ciertamente, solo te ha devuelto la parte entera, por que el resultado completo es 221,75 , pero…

Conclusión

Como has podido leer, Vim con sus registros te abre un mundo entero de posibilidades. NMo es necesario que los aprendas de golpe. Simplemente, recuerda lo que son y que están ahí, y cuando los necesites, utilízalos y exprímelos al máximo, para aprovechar todo su potencial.

Más información,