¿Cómo copiar datos entre diferentes instancias de vim?


41

Si uso el primer vim para copiar una línea (con yy), ¿cómo pego al vim de otro terminal (con p)? ¿Hay algún comando o configuración que pueda hacerlo? ¿Puedo copiar y pegar en el portapapeles del sistema global?

Sé que las siguientes formas son posibles, pero quiero una más simple:

  1. No quiero salir del primer vim y volver a abrir el segundo vim.

  2. No quiero usar una ventana separada (con :sp).

Respuestas:


49

Primero debe instalar una versión de vim habilitada para el portapapeles. Para acomodar a usuarios con entornos no gráficos (por ejemplo, usuarios de Ubuntu Server), vimy vim-tinyno enganchar a esta capacidad. Querrá instalar GVimInstalar GVim , que se iniciará gráficamente o en su terminal. GVim reemplazará el vimcomando.

Puede tirar del texto al 'búfer de corte' desde el primer vim y luego pegar el texto en el segundo vim. Para copiar al búfer de corte global, use el +registro. La "clave le permite especificar qué registro usar cuando realiza una operación de extracción o pegado.

En el primer vim, tira una línea en el +registro:

"+yy

luego, para pegar desde el +registro en el segundo vim:

"+p

Para obtener más información sobre los registros disponibles, consulte :help registers. También puede usar "+ppara pegar texto copiado de cualquier otra fuente en su sistema.


Para lo que sea que valga la pena, si instala GVim (el paquete podría llamarse algo así como vim-gnome), las entradas del menú a menudo le darán los atajos de teclado que invocarán.
zpletan

1
No quiero instalar Gvim. ¿Cómo hago esto en vim?
trusktr

1
@trusktr en realidad esto también funciona en vim. En estas preguntas y respuestas , dice que necesita al menos vim 7.3.74 (lo que significa Ubuntu 11.10 o posterior).
lumbric

esto de alguna manera no funciona si tiene un vim iniciado dentro de tmux y otro vim comenzó normalmente afuera, ¿hay alguna posibilidad de que sepa cómo solucionar este problema?
serup

"*yy, "*ptambién funciona. si :reg
aciertas


9

Me gusta la solución de Bill, y he creado un mapeo:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

el primero en modo visual copia todo en / tmp / vitmp y el segundo copia el contenido de / tmp / vitmp en el archivo


solución simple y directa: a la antigua usanza. Gracias, esto lo hizo por mí
Serup

¿Qué necesito para escribir Vim después de agregar esto al .vimrc?
Vitaly Zdanevich

Debe configurar vim para poder usar la tecla líder seguida de y para copiar, la tecla líder seguida de p para pegar.
Samir Sadek

1
Este es el que funciona. el uso "*yparece estar roto en los servidores
ospider

Oh mi. He estado buscando durante horas en este tema usando vim en tmux en docker. Mi vimrc normal que ya tenía unnamed / unnamedplus NO funcionó en vim en tmux en docker. Tampoco nada que encontré en internet. Sin embargo, ¡ESTO parece funcionar en TODAS las máquinas! En docker, en Mac y en Arch de forma nativa. ¡¡Gracias!!
Tommy

5

Me muevo entre varias máquinas de la familia Unix y he encontrado que la siguiente secuencia siempre funciona para mí:

En la fuente vi sesión:

  1. Use ESC m apara marcar la primera línea
  2. Use ESC m bpara marcar la última línea
  3. Úselo :'a,'b w! xferpara escribir el rango en un archivo scratch

En sesión de destino:

  1. Mueve el cursor a la línea de inserción
  2. Use ESC :r xferpara leer en texto

Sé que no es bonito, ¡pero siempre funciona para mí!


2

En realidad es bastante simple: instalar una versión vimque admita el portapapeles. si vimno lo hace, obtenga cualquiera de los siguientes:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Una vez instalado, solo corre vim. También puede verificar que el portapapeles esté habilitado ejecutando:

 vim --version|grep clipboard

debería ver +xterm_clipboard.


Esta respuesta llega al meollo del problema, es decir, ¿su versión de Vim tiene habilitada la función de portapapeles? Si no es así, ninguna de estas otras respuestas hará ninguna diferencia. Haga "vim --version" y busque "+ portapapeles". Creo que + xterm_clipboard solo se aplica si quieres soporte para el portapapeles X11, pero si estás en Ubuntu también querrás esto.
Ray

2

Probablemente todos odiarán esta respuesta. Solía ​​trabajar en vi en los años 80 en una variedad de computadoras Unix y he tenido la reciente ocasión de jugar en Linux.

Mi solución para cortar y pegar es usar Putty ejecutándose en Windows para acceder a mi caja de Linux.

Putty le permite copiar cualquier txt en su ventana simplemente resaltándolo. luego puede ir a otra ventana / sesión de Putty y hacer clic derecho para pegar.

No podría ser más fácil. y ahora hay vim. lástima que no existiera en mi época, me habría ayudado a defenderme de la mafia emacs.


1

No está usando exactamente yy, pero si selecciona el texto que desea copiar con el mouse (a veces puede que necesite usar Shift- [arrastrar]), cambie a la otra ventana de terminal y haga un [clic central] o Shift- [centro haga clic] allí, el texto se insertará en su punto de inserción actual.

Esto funciona para la mayoría de los programas de línea de comandos y GUI, no solo para vim.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.