Cómo copiar líneas seleccionadas al portapapeles en vim

Respuestas:

105

SHIFTVte pone en modo de seleccionar líneas. Luego "*ytira de las líneas actualmente seleccionadas al *registro que es el portapapeles. Hay bastantes registros diferentes, para diferentes propósitos. Consulte la sección sobre selection and drop registerspara obtener detalles sobre las diferencias entre los registros *y +en Windows y Linux.

Spencer Rathbun
fuente
10
En Linux, + es el portapapeles global, * es el portapapeles de selección, mientras que en Windows ambos se asignan al portapapeles global.
Mohnish
74

Si está en Linux y está usando una versión de VIm 7.3.74 o superior (la versión que se instala en Ubuntu 11.10 en adelante lo cumple), puede hacerlo

set clipboard=unnamedplus

que colocará el texto extraído en el portapapeles global y le permitirá pegar desde el portapapeles global, sin tener que utilizar ningún registro especial. A diferencia de la solución de ldigas, esto también funcionará en versiones sin interfaz gráfica de usuario de VIm.

Suan
fuente
8
Esto solo funciona si instalo el vim-gnomepaquete en lugar de vim.
dan-klasson
4
@ dan-klasson: esta opción requiere un vim compilado con soporte para portapapeles. Puede comprobar si este es el caso escribiendo vim --version | grep "+xterm_clipboard".
BenC
Esto parece funcionar para copiar en otros programas que no son de vim, pero cuando entro en el modo de inserción en vim y uso "shift + insert" para pegar desde el portapapeles, solo se pegan las dos primeras líneas ... Instalé vim-gnome ; ¿Me estoy perdiendo algo más?
t2k32316
1
Si está en macOS, probablemente necesitará usar clipboard=unnameden su lugar ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
streof
13
set guioptions+=a

Will, ... uhmm, en resumen, cada vez que seleccione / tire de algo, colóquelo en el portapapeles también (no en Vim, sino en el teclado global del sistema de ventanas). De esa manera, no tendrá que pensar en guardar cosas en un registro especial.

Torre
fuente
2
//, ¿A qué sistemas operativos y / o versiones de Vim se aplica este consejo?
Nathan Basanese
10

Para GVIM, presione vpara entrar en modo visual; seleccione el texto y presione Ctrl+Insertpara copiar la selección en el portapapeles global.

En el menú puede ver que la tecla de método abreviado es, por "+yejemplo, mantener presionada la tecla Shift, luego presionar ", luego +y luego soltar Shift y presionar y(engorroso en comparación con Shift + Insert).

Mohnish
fuente
¿Por qué esta respuesta no es popular? :(
Ankit Shubham
6

Si está utilizando vim en MAC OSX, desafortunadamente viene con una versión anterior y no cumple con las opciones del portapapeles. Afortunadamente, el homebrew puede resolver este problema fácilmente.

instalar vim:

brew install vim --with-lua --with-override-system-vim

instalar la versión de interfaz gráfica de usuario de vim:

brew install macvim --with-lua --with-override-system-vim

reinicie el terminal para que surta efecto.

agregue la siguiente línea a ~ / .vimrc

set clipboard=unnamed

ahora puede copiar la línea en vim con yy y pegarla en todo el sistema.

anónimo
fuente
//, acabo de probar esto en OSX 10.12.3, y funcionó correctamente después de instalar tanto la última versión de Vim como la última versión de GUI de Vim, como recomendó aquí. Gracias, @anónimo.
Nathan Basanese
4

Instale "xclip" si no lo ha hecho ...

sudo apt-get install xclip

Xclip coloca los datos en el portapapeles "selección / resaltado" en el que hace clic con el botón central para pegar en lugar de "ctrl + v"

Mientras está en vim, use los comandos ex:

7w !xclip

o

1,7w !xclip

o

%w !xclip

Luego, haga clic con el botón central para pegar en cualquier otra aplicación ...

user3512967
fuente
4

Si vim está compilado con soporte para portapapeles, entonces puede usar el "*ysignificado: coloque el texto seleccionado visualmente en el registro *('*' es para el portapapeles)

Si no hay soporte para el portapapeles, creo que la única forma es usarlo Ctrl+Insertdespués de seleccionar visualmente el texto en vim.

dvk317960
fuente
3

He agregado la siguiente línea a mi .vimrc

vnoremap <F5> "+y<CR>

Esto le permite copiar el texto seleccionado al portapapeles presionando F5. Debe estar en modo visual para que esto funcione.

aks
fuente
1
Agregar a ~/.vimrcGracias, esto es mucho mejor.
jaggedsoft
2

Agrega el siguiente código en tu .vimrc:

if has('clipboard')
    if has('unnamedplus')  " When possible use + register for copy-paste
        set clipboard=unnamed,unnamedplus
    else         " On mac and Windows, use * register for copy-paste
        set clipboard=unnamed
    endif
endif
John Trump
fuente