Copy/Paste entre diferentes terminales Vim: Usando el portapapeles del sistema

¿Alguna vez has intentado copiar contenido entre dos terminales de vim y no has sido capaz? Te explicamos como solucionarlo.

El problema es que vim utiliza un portapapeles propio, en lugar de utilizar el del sistema. Sin embargo, Vim permite comunicarse con el portapapeles del sistema mediante registros.

Registros “* y “+

Los registros “* y “+ son utilizados para el portapapeles del sistema (Más información utilizando el comando :help registers). Dependiendo de su sistema, pueden hacer cosas diferentes. Por ejemplo, en sistemas que no usan X11 como OSX o Windows, el registro “* se usa para leer y escribir en el portapapeles del sistema. En los sistemas X11 se pueden usar ambos registros. Básicamente el “* es análogo a la selección PRIMARIA de X11 (que generalmente copia las cosas que selecciona con el mouse y pega con el botón central del mouse) y “+ es análogo a la selección CLIPBOARD de X11 (que es el portapapeles propiamente dicho).

Si todo eso pasó por tu cabeza, intenta usar:

“+yy ó “*yy: Copiar una linea

“+pp ó “*pp: Pegar una linea

V o v: Seleccionar (V linea v cursor)

“+y ó “*y: Copiar selección

“+p ó “*p: Pegar selección

Suponiendo que tiene las opciones de compilación adecuadas, una u otra debería funcionar.

Posibles problemas

Hay que tener en cuenta que copiar / pegar desde el portapapeles del sistema no funcionará si el siguiente comando devuelve un 0:

:echo has(‘clipboard’)

En este caso, vim no ha sido compilado con la función de portapapeles y es necesario instalar una versión diferente. Algunas distribuciones de Linux como Debian, proporcionan una instalación mínima de vim de forma predeterminada, pero en general, la solución es instalar el paquete vim-gtk.

Asignar atajo de teclado

Por comodidad, es posible asignar este comando a algún atajo de teclado Por ejemplo, insertando en el fichero ~/.vimrc:

vnoremap <C-c> “*y

vnoremap <C-v> “*p

De esta manera se puede utilizar el atajo Ctrl+C para copiar,, y Ctrl+V para pegar en el portapapeles del sistema.

Usar el portapapeles por defecto

Existe la opción de utilizar el portapapeles por defecto, descrita usando el comando:

:help cb

En el nos indica que se puede configurar el portapapeles por defecto,  de manera que los contenidos se copien automáticamente en el portapapeles del sistema, usando uno de los siguientes comandos:

:set clipboard=unnamed

:set clipboard=unnamedplus

Conclusiones

Primero se comprueba que la opción de usar los registros esté disponible en Vim mediante el comando:

:echo has(‘clipboard’)

Si devuelve 0, es necesario instalar vim-gtk.

Tras esto se puede copiar y pegar contenido de la siguiente manera:

“+yy ó “*yy: Copiar una linea

“+pp ó “*pp: Pegar una linea

V o v: Seleccionar (V linea v cursor)

“+y ó “*y: Copiar selección

“+p ó “*p: Pegar selección

De esta manera nunca volverás a tener problemas utilizando copy/paste en Vim.

Saludos


Jose F Gómez

Jose F Gómez

Emprendedor, Ingeniero de Telecomunicaciones, Arquitecto big data, administrador de redes y sistemas y programador. Apasionado por el mundo de las telecomunicaciones y la informática desde la infancia, siendo mi mayor interés las redes y la seguridad, el tratado y análisis de datos y el conocimiento por placer.

3 Comments

John · October 27, 2018 at 12:41 am

Having read this I thought it was really informative.
I appreciate you finding the time and effort to put
this short article together. I once again find myself spending a lot of time both reading and leaving
comments. But so what, it was still worthwhile!

keonhacai · October 27, 2018 at 9:15 am

Hi, I do think this is a great site. I stumbledupon it 😉 I am going to return once again since i
have bookmarked it.

Sevenbites · January 14, 2019 at 6:13 pm

Hello there! This is my 1st comment here so I just wanted to give a quick shout out and tell you
I really enjoy reading through your articles. Can you suggest any other blogs/websites/forums
that cover the same topics? Many thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *