¿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?

ripper234
fuente

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.

Hamish Downer
fuente
@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.

Reid
fuente
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.

Espacio de bucle
fuente
¿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
Bernhard Heijstek
fuente
6

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

"+y

Muy intuitivo

ripper234
fuente
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.

crazy2be
fuente
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.

hombre_ risas
fuente
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.

Ashutosh Tripathy
fuente
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í

Andrzej Rehmann
fuente
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.

gc5
fuente