Cómo copiar al portapapeles en Vim?

¿Es posible copiar al portapapeles directamente desde Vim? yy solo copia cosas al buffer interno de Vim. Quiero copiar al portapapeles del sistema operativo. ¿Hay algún comando en Vim o solo puedes tirar cosas dentro de Vim?

El * registro hará esto. En Windows, + y * son equivalentes. En Unix hay una sutil diferencia entre + y * :

En Windows, los registros * y + son equivalentes. Para los sistemas X11, sin embargo, difieren. Para sistemas X11, * es la selección, y + es el búfer de corte (como el portapapeles). http://vim.wikia.com/wiki/Accessing_the_system_clipboard

* es probablemente lo que desea la mayoría del tiempo, entonces uso * porque funciona como lo espero en ambos entornos.

En las distribuciones de Linux, por alguna razón, primero debe instalar vim-gtk para obtener la funcionalidad del portapapeles.

Y para aquellos confundidos acerca de cómo usar registros al tirar o poner, simplemente escribes " entonces el nombre del registro. Así que para copiar algo al registro del portapapeles escribes "*y y luego para poner tu tipo "*p

En Mac OSX

  • copiar la parte seleccionada: seleccionar texto visualmente (escriba v o V en modo normal) y escriba :w !pbcopy

  • Copie todo el archivo :%w !pbcopy

  • pegar desde el portapapeles :r !pbpaste

En la mayoría de las distribuciones de Linux , puede sustituir:

  • pbcopy arriba con xclip -i -sel c o xsel -i -b
  • pbpaste usando xclip -o -sel -c o xsel -o -b
    Nota: en caso de que ninguna de estas herramientas ( xsel y xclip ) esté preinstalada en su distribución, probablemente pueda encontrarlas en los repositorys.

En su archivo vimrc puede especificar que use automáticamente el portapapeles del sistema para copiar y pegar.

En el conjunto de Windows:

 set clipboard=unnamed 

En el conjunto de Linux (vim 7.3.74+):

 set clipboard=unnamedplus 

NOTA: Es posible que necesite utilizar una versión actualizada de Vim para que funcionen.

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Use el registro "+ para copiar al portapapeles del sistema (es decir, "+y lugar de y ).

Del mismo modo, puede pegar desde "+ para obtener texto del portapapeles del sistema (es decir, "+p lugar de p ).

@Jacob Dalton ha mencionado esto en un comentario, pero nadie parece haber mencionado en una respuesta que vim tiene que comstackrse con el soporte del portapapeles para que cualquiera de las sugerencias mencionadas aquí funcione. El mío no estaba configurado de esa manera en Mac OS X por defecto y tuve que reconstruir vim. Usa este comando para saber si lo tienes o no vim --version | grep 'clipboard' vim --version | grep 'clipboard' . +clipboard significa que estás bien y las sugerencias aquí te funcionarán, mientras que ” -clipboard significa que debes recomstackr y reconstruir vim.

Resumiendo y hacer que sea más fácil para los novatos,

Para copiar la línea actual, en modo comando, escriba:

 "*yy 

Para copiar todo el archivo / búfer, en modo comando, primero ve al principio por gg , luego escribe

 "*yG 

Como se señaló, esto requiere +clipboard fuera de vim --version , que indican la disponibilidad del soporte del portapapeles, -clipboard significa no.

No pude copiar al sistema de mi portapapeles porque tenía esto en mi archivo ~ / .vimrc:

  if has('mouse') set mouse=a endif 

Pero si agrega esta línea a continuación, le permitirá simplemente Ctrl + c para obtener lo que haya seleccionado en su portapapeles.

 vmap  "+y 

Discusión original y más detalles: copie el texto de vim con set mouse = a enabled

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

instalar vim:

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

instalar gui verion de vim:

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

reinicie la terminal para que tenga efecto.

añada la siguiente línea a ~ / .vimrc
set clipboard=unnamed

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

Método actualizado :

Nunca estuve satisfecho con el método del portapapeles establecido durante años. El mayor inconveniente es que arruinará el historial de su portapapeles, incluso cuando use x para borrar. Aquí hay una solución mejor y más elegante.

  1. Copie el texto [rango] de vim en el portapapeles del sistema. (Sugerencia: use v o V para seleccionar el rango primero, y luego escriba los dos puntos : para activar el comando Ex):
    :[range]yank +
    p.ej,
    :5,10y * (copiar / tirar líneas 5-10 al portapapeles del sistema * registrarse)

  2. Pegue el contenido del portapapeles del sistema en vim en una nueva línea:
    :put +

la solución para mí fue instalar vim adicional que tiene la opción del portapapeles incluida:

 sudo apt-get install vim-gnome 

Si está utilizando GVim, también puede set guioptions+=a . Esto activará la copia automática al portapapeles del texto que resalte en el modo visual.
Drawback: tenga en cuenta que los administradores avanzados del portapapeles (con historial) obtendrán en este caso todo su historial de selección …

Si su vim resulta ser comstackdo sin la opción +xterm_clipboard como está por defecto en Debian y creo que Ubuntu, puede canalizar la selección o el búfer completo al progtwig externo que maneja el portapapeles del escritorio. Para xclip (que puede necesitar instalar previamente), el comando será :w !xclip -sel clip

Puede encontrar las respuestas aquí Arch Wiki

Para Linux: antes que nada debes habilitar el portapapeles en tu versión de vim instalando gvim .


Luego tienes que poner esta línea en tu archivo .vimrc .

set clipboard=unnamedplus

Quizás alguien lo encuentre útil. Quería mantenerme independiente del portapapeles X y aún así poder copiar y pegar texto entre dos vims en ejecución. Este pequeño código guarda el texto seleccionado en el archivo temp.txt para copiarlo. Pon el código a continuación en tu .vimrc. Use CTRL-c CTRL-v para hacer el trabajo.

vnoremap: w! cp / dev / null ~ / temp.txt && cat> ~ / temp.txt

noremap: r! cat ~ / temp.txt

  1. Pon set clipboard=unnamed en tu vimrc .
  2. Seleccione lo que desea copiar en el modo Visual (presione v para ingresar).
  3. Regrese al modo Normal (Presione escape [esc]), presione y para copiar.
  4. Si desea pegar algo del portapapeles del sistema operativo, presione p / P en el modo Vim Normal .

En vim solo bajo la terminal ubuntu,

presione shift + drag mouse para seleccionar un texto en vim y luego ctrl + shift + c en la terminal

luego ctrl + v en otro editor

Soy un Vim newby pero, para copiar todo el texto al portapapeles del sistema (por ejemplo, si desea pegarlo en un procesador de textos u otro editor de texto como gedit, mousepad, etc.), en modo normal:

ggVGy

o, más simplemente:

:% y

Como sugerí, también instalé vim-gtk y puse

set portapapeles = unnamedplus

en mi .vimrc

y todo funciona bien

Si desea copiar solo una parte del texto, use el modo visual (v) , seleccione el texto que desea copiar y presione y .

Finalmente, sugiero un progtwig de portapapeles como Clipman (mi favorito), Clipit, Parcellite o similar.

(Estoy usando vim 8.0 en Debian Stretch Xfce)

¡PERDONAME POR MI INGLÉS! 🙂

Para Ubuntu – julio de 2018

Use el registro “+ para copiar al portapapeles del sistema (es decir, ” + y en lugar de y ).

Del mismo modo, puede pegar desde “+ para obtener texto del portapapeles del sistema (es decir, ” + p en lugar de p ).

También debe asegurarse de que vim esté comstackdo con soporte para el portapapeles. Tratar:

 vim --version | grep .xterm_clipboard -o 

y si es -xterm_clipboard (un prefijo menos), entonces no tiene soporte.

Aquí hay algunas instrucciones para intercambiar con una versión funcional de vim que tiene compatibilidad con el portapapeles.

  • $ sudo apt-get purge vim
  • $ sudo apt-get autoremove (elimina cualquier paquete de dependencia de vim ajeno del sistema)
  • $ sudo apt-get install vim-gnome

Verifique de nuevo con vim --version | grep .xterm_clipboard -o vim --version | grep .xterm_clipboard -o y puede confirmar que el portapapeles ya está disponible (es decir, + xterm_clipboard )

Buena suerte.

Escribí una línea simple en mi .vimrc para que funcione la copia. Espero que esto ayude a alguien. Mi vim no está instalado con el soporte del Portapapeles, desafortunadamente, por lo que ninguna de estas sugerencias funcionó para mí. Básicamente, pega esta línea en tu .vimrc:

 map  y:e ~/clipsongzboardP:w !pbcopy:bdelete! 

Si desea leer detalles sobre lo que hace, puede leer sobre esto en mi blog

Para algunos teclados internacionales, puede necesitar presionar " + Espacio para obtener un " .

Entonces, en ese caso, debe presionar " Espacio + y o " Espacio * y

En caso de que no desee utilizar ninguna interfaz gráfica para vim y prefiera simplemente quedarse con el emulador de terminal, puede haber un enfoque mucho más simple para este problema. En lugar de usar un tirón o algo como esto, primero eche un vistazo a la documentación del terminal que usa. He estado luchando con el mismo problema (tratando de usar + clipboard y xclip, etc.) y al final resultó que en mi emulador de terminal basta con presionar shift y seleccionar cualquier texto que quiera copiar. Eso es. Muy simple y sin necesidad de jugar con la configuración. (Yo uso urxvt por cierto).

Si tiene xclip, una forma fácil de copiar texto en el portapapeles es la siguiente:

  1. Yank text que quiere copiar. ( y comando en vainilla vim)
  2. Escriba in :call system("xclip -selection clipboard", @")

:call system() ejecuta un comando de terminal. Toma dos argumentos, el primero el comando, el segundo qué canalizar a ese comando. Por ejemplo :echom system("head -1", "Hello\nWorld") devuelve Hello (con algo de relleno). echom devuelve la salida de un comando, la llamada no.

xclip -selection clipboard simplemente copia texto en el portapapeles del sistema en lugar de hacerlo en el portapapeles de X por defecto (Accedido por el botón de medio de movimiento).

@" devuelve el último texto extraído” es el registro predeterminado, pero puede usar cualquier registro. Para ver el contenido de todos los registros, escriba :registers .

si se conecta al sistema Unix mediante masilla, siga los pasos a continuación para copiar el contenido de un archivo

  • Resalte el texto que desea copiar (podrá copiar página por página)
  • presiona ctrl + c (copiará el texto al portapapeles
  • pegar en cualquier editor externo Hecho

selecting con la ayuda del mouse y haciendo right-click copy en mi caso.

No quería que se incluyeran los números de línea, así que :set nonumber antes de copying .

Tuve un problema porque mi vim no estaba soportando el portapapeles :

 vim --version | grep clip -clipboard +insert_expand +path_extra +user_commands +emacs_tags -mouseshape +startuptime -xterm_clipboard 

Instalé vim-gnome (que soporta el portapapeles) y luego lo compruebo de nuevo:

 vim --version | grep clipboard +clipboard +insert_expand +path_extra +user_commands +emacs_tags +mouseshape +startuptime +xterm_clipboard 

Ahora puedo copiar y pegar usando “+ y y” + p respectivamente.

Nada de lo anterior funcionó para mí en mi computadora portátil con Windows.

Ctrl + C estaba bien para copiar … ¡pero necesitaba Shift + Insertar para pegar!

(Una buena razón para obtener siempre una computadora portátil donde siempre se puede acceder a la inserción sin presionar una tecla secundaria)

para OSX, al igual que las 10342 respuestas anteriores, debe asegurarse de que vim admite la función del portapapeles, dijo que la que viene preenvío con OSX NO es compatible con el portapapeles, y que si ejecuta brew install vim , funcionaría .

Excepto que ejecutar vi aún te hará ejecutar la versión de OSX preenvuelta, no la que instalaste de brew.

Para superar esto, simplemente alias mi comando vim a la versión brew, no la predeterminada de OSX:

 alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim" 

y ahora estoy dorado