¿Cómo copiar texto de vim a un programa externo?


84

Estoy tratando de copiar y pegar un texto de vim. Estoy haciendo v para ingresar al modo visual, luego y una vez que seleccioné mi bloque.

Parece copiar el texto en el portapapeles de vim, porque p lo pegará. Pero en otro programa (por ejemplo, Chrome), hacer clic con el botón derecho-> pegar no pega el texto correcto. ¿Cómo copio texto al portapapeles correcto?

Respuestas:


63

Lo siguiente funcionará solo si vim --versionindica que tiene una +xterm_clipboardfunción. De lo contrario, deberá instalar paquetes adicionales o volver a compilar vim con esa característica agregada.


En realidad, hay dos opciones para esto:

"+y

copias en el búfer del portapapeles "habitual" (para que pueda pegar usando Ctrl + V, haga clic derecho y seleccione "Pegar", etc.), mientras

"*y

copias a la selección X11: puede pegar desde este búfer con un clic central.

Tenga en cuenta eso "*y "+trabaje en ambos sentidos. Entonces, si ha seleccionado algún texto en otra aplicación, puede pegarlo en vim usando "*py si ha copiado algo de texto (usando, por ejemplo, Ctrl-C), puede pegarlo en vim usando "+p.


@Tshepang no funciona desde la masilla. Qué tengo que hacer ?
Rahul Patil

@RahulPatil No lo sé; tal vez haga una pregunta por separado, tal vez en Super User (ya que es una herramienta de Windows, sería más bienvenido allí).
tshepang

@RahulPatil: si está utilizando masilla, está editando el archivo en un servidor remoto, no en su máquina local. En general, el servidor remoto no sabrá sobre el portapapeles en su máquina local. Si estaba utilizando un escritorio Linux, puede enviar ssh con reenvío X (siempre que haya instalado las bibliotecas X en el servidor), pero como la masilla se ejecuta en Windows, no tiene X ejecutándose, por lo que no puede reenviarlo.
Hamish Downer

1
Hola a todos, ¿Cómo escribir "+ y? ¿Debería escribirlo en modo Visual o en modo comando? Cosa tonta, pero no puedo resolverlo.
Alind Billore

@AlindBillore: en modo comando. Literalmente, presione las teclas shift'y shift=luego y(no todas a la vez, una tras otra, excepto los turnos, por supuesto).
Reid

31

Si está utilizando vim> = 7.3.74, puede poner esto en su vimrc:

set clipboard=unnamedplus

Que utilizará automáticamente el +búfer (el portapapeles del sistema) de forma predeterminada. Luego, para tirar (copiar), solo usa el ycomando regular , etc.

Sin embargo, encontré que este comportamiento es bastante molesto, ya que los comandos como dponer el texto en el que operan en el búfer predeterminado, lo que significaba que no podía hacerlo rápido ddy pegar una línea desde Internet, por ejemplo.


2
+ es un registrador de portapapeles
Kit Ho

1
En cuanto a su último punto, ddsignifica "cortar una línea", por lo que ese sería el comportamiento esperado. En el raro caso en que desee eliminar realmente una línea en el olvido, "_ddhará el truco.
user7089

también como @HamishDowner señala en su respuesta: Lo siguiente funcionará solo si vim --versionindica que tiene una +xterm_clipboardfunción. De lo contrario, deberá instalar paquetes adicionales o volver a compilar vim con esa característica agregada.
rudolph9

24

Mantenga presionada la tecla Mayús y seleccione texto con el cursor del mouse.
El texto se copiará en el portapapeles.

Esto también funciona para pegar desde el portapapeles a vim.

Para que quede claro, esto funciona para vimejecutarse en un terminal como xterm.


¿Te refieres a mantener presionada la tecla Mayús al seleccionar texto? Así es como lo hago xterm.
nozimica

@nozimica: sí.
Loop Space

Esta respuesta debería tener más votos a favor ...
whoan

@LoopSpace para selecciones multilínea, esto también copiará los números de línea cuando set nuesté habilitado. Por lo tanto, es probable que desee alternar los números de línea con algún atajo o ejecutar el :set nonucomando antes de cada selección
Steven Pribilinskiy

En MAC, mantenga presionada la tecla de opción y seleccione el texto con el cursor del mouse
abreschi

10

El estándar "+gPy los "+ycomandos me parecen muy difíciles de usar. Así que me he reasignado Ctrl-Ypara tirar en el portapapeles y Ctrl-Ppegar desde el portapapeles. Agregue esto a.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP

6

No importa, encontré la respuesta: está escrita en los menús de vim.

"+y

Muy intuitivo


Estas usando gvim?
nozimica

@ nozimica- sí
ripper234

1
Eso también está disponible en vim que se ejecuta en un xterm o un emulador de terminal similar en X (si vim se compila con la +xterm_clipboardfunción).
Gilles

3

Solo para agregar una respuesta no específica de vim: puede usar Ctrl+Shift+Cpara copiar en el portapapeles del sistema en Ubuntu (si la funcionalidad es proporcionada por su emulador de terminal, gnome-terminal para uno lo proporciona). Ctrl+Shift+Vpega a otra ventana de terminal, Ctrl+Vpega regularmente a una aplicación GUI.

Además, si selecciona el texto en el terminal, luego hace clic con el botón central, se pegará desde el portapapeles X11.


Por alguna razón no funciona. Simplemente seleccione con modo visual, copie con ctrl-shift-C, luego pegue en otra aplicación usando Ctrl-shift-V? El texto no se copia para mí.
ripper234

2
@ ripper234: esto no funciona si está utilizando gvim. Como dijo crazy2be, esta funcionalidad es de su emulador de terminal.
Reid

@ ripper234: 1) Es la funcionalidad proporcionada por su emulador de terminal (gnome-terminal para uno lo proporciona), 2) Ctrl + Shift + V es pegar en el terminal , las aplicaciones GUI todavía usan Ctrl + V como de costumbre. Editaré la respuesta para que quede más claro.
crazy2be

si usa el mouse de control de desplazamiento - seleccione texto, copie y pegue desde una ventana de buffers se vuelve fácil.
Stephan

2

De manera predeterminada, si instala la versión ligera de vim, no tendrá la +xterm_clipboardfunción on ( vim --version | grep xterm), que es necesaria para usar los registros *y +fuera de vim.

Para habilitarlo, debe compilar vim usted mismo o instalar una versión de vim que viene con él habilitado previamente. Solía vim-gnome: sudo apt-get install vim-gnome. Si realiza vim --version | grep xterm, verá que es ahora +xterm_clipboard.

Ahora, trata de copiar a la +e *y debería funcionar.


2

Cuando verifiqué que mi vim no era compatible con el portapapeles:

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

Instalé vim-gnome y luego verifiqué nuevamente

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.


1

Mantenga presionada la tecla MAYÚS y seleccione el texto del mouse para copiarlo.

Luego pegue en otro programa con CTRL + v.

Funciona en terminal en mi Ubuntu 16.04. No estoy seguro acerca de gvimy otros sistemas.

ingrese la descripción de la imagen aquí


Eso no funciona.
Astrid

respuesta creativa
vidur punj

0

Solo para agregar, si algo funciona, intente cambiar el terminal que envuelve vim (si está usando vim desde el terminal). Descubrí que, por ejemplo, el portapapeles es inaccesible por guake mientras se puede acceder desde gnome-terminal.

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.