Copiar texto fuera de Vim con set mouse = a habilitado


232

Después de habilitar set mouse=a, el texto copiado dentro de Vim no se pegará fuera de Vim. ¿Alguien sabe de una manera de arreglar esto?

Aquí, seleccionar texto con el mouse activa el modo visual y deshabilita la Copyopción en el menú emergente:

ingrese la descripción de la imagen aquí


2
Si su vim está compilado con +clipboardy mouse=a, podrá copiar / pegar desde / a vim sin usar el menú emergente del terminal. Puede verificar si clipboardestá habilitado usando vim --version.
Jérôme Pouiller

@Jezz Vale la pena aclarar que A) mouse=ano es una opción de compilación, es algo en vimrc B) Cuando se compiló vim +clipboardle permite copiar / pegar cuando :set numberestá activado , y sin copiar / pegar los números, aunque quizás todavía tenga que hacer algo mapeos C) Uno no tiene que recompilar VIM ellos mismos, puede estar activado en el vim en algunos administradores de paquetes compatibles con cualquier sistema operativo. En osx, vw de brew lo tiene aunque el vim predeterminado de osx no. Mi respuesta menciona este re osx.
barlop

Tal vez la instalación también xselfuncione para usted, puede seleccionar texto con el editor o con el mouse y presionar ctrl+cpara copiar el texto, por cierto es para neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi

Respuestas:


426

Presione shiftmientras selecciona con el mouse. Esto hará que la selección del mouse se comporte como si mouse=ano estuviera habilitada.

Nota: este truco también se aplica a "pegar botón central": si desea pegar en el texto vim que se seleccionó afuera, presione shiftmientras hace clic en el botón central. Solo asegúrese de que el modo de inserción esté activado cuando lo haga (es posible que también desee :set pasteevitar efectos inesperados).

OS X (mac): mantenga presionada la tecla alt / option mientras selecciona ( fuente )


2
OK, esta es de hecho la solución. Pero, ¿qué sucede si desea seleccionar mucho código que es más que en su pantalla? (luego tienes que desplazarte y seleccionar al mismo tiempo)
Ozkan

3
También hay una opción para usar la selección de bloque presionando <kbd> ctrl </kbd> + <kbd> shift </kbd> + botón izquierdo del mouse para iniciar la selección de bloque. El botón central del mouse pega el contenido copiado en otra ventana.
micrub

66
Si tiene números de línea (como se muestra en la captura de pantalla), al seleccionar con ALT en un Mac OS X, los números de línea también se copian. En este caso, es mejor usar ALT + CMD al seleccionar el modo de selección de bloque para evitar seleccionar los números.
Aaron

16
Para Mac Terminal, después de OS X 10.11 El Capitan , la Fnclave es el camino correcto. Es decir, (con mouse=ahabilitar) seleccionando texto mientras presiona la Fntecla, luego use CMD + C para copiar y pegar en cualquier lugar que desee.
YaOzI

1
No sé cómo esa respuesta tiene tantos votos positivos. Si habilitó la compatibilidad con el mouse para evitar copiar números de línea, esta sugerencia es totalmente inútil.
Stelios Adamantidis

49

Utilizar " , +, ydespués de hacer una selección visual. De todos modos, no debería usar el comando de copia del terminal, porque eso copia lo que el terminal ve en lugar del contenido real. Esto es lo que hace esto:

  • ", +le dice a Vim que use el registro nombrado +para la próxima eliminación, extracción o colocación. El registro llamado+ es un registro especial, es el registro del portapapeles X11. (En otros sistemas, usaría en su *lugar, creo, ver :help clipboardy :help x11-selection)
  • y es el comando yank, que le dice a Vim que coloque la selección en el registro nombrado anteriormente.

Podrías mapearlo así:

:vmap <C-C> "+y

Y luego resalte algo con el mouse y presione Control-Cpara copiarlo.

Esta característica solo funciona cuando Vim ha sido compilado con la +xterm_clipboardopción. Corre vim --versionpara averiguar si es así.


44
O posiblemente "*ydependiendo del sistema operativo.
frabjous

¡Eso funciono! Sin embargo, la combinación es bastante compleja, 4 botones en realidad ... Probablemente necesito mapear el otro mientras uso la forma "shift" de la otra respuesta.
lyuba

El mapeo también funciona perfectamente :) Ahora no sé cuál de las respuestas de ustedes debería marcar como aceptada :)
lyuba

2
Para mí, esta es una mejor solución que la respuesta aceptada porque con este método, los números de línea no se copian.
Saulo Silva

¿Qué hay de +clipboard? ¿Y qué hay +clipboardde xterm_clipboardapagado?
barlop

18

En lugar de set mouse=ausar set mouse=ren .vimrc


1
Pero deshabilita el desplazamiento
Makesh

3
Por favor di por qué. De un vistazo, esto parece básicamente lo mismo que deshabilitar completamente el modo del mouse, que no es el punto de la pregunta.
Mikel

@Mikel derecha, véase mi respuesta también la respuesta de Josh Lee puede ayudar
barlop

Desafortunadamente, esto también copiará los números de línea si están habilitados.
vikin9

17

En el uso de OSX en fnlugar de shift.


funcionó para mí con la optionclave, que es altequivalente en el host MacOS. Sin embargo, era una terminal remota en debian9. no funcionó agregando ninguno de set mouse=a/ set mouse=rin /etc/vim/vimrcen remoto.
mrtipale

5

En Ubuntu, es posible usar los enlaces X-Term para copiar y pegar dentro de VIM (Ctrl-Shift-C y Ctrl-Shift-V) en el texto que se ha resaltado con la tecla Shift.


4

Otra opción de OSX-Mac es desmarcar View->Allow Mouse Reporting(o presionar ⌘-R para alternarlo). Esto le permite alternar entre la interacción del mouse y la selección del mouse, lo que podría ser útil al seleccionar y copiar / pegar algunos bits porque no tiene para mantener presionada una tecla modificadora para hacerlo.

Nota para Multilínea con números de línea:

Por lo general, tengo habilitados los números de línea, por lo que esto también copiará los números de línea si selecciona varias líneas. Si desea copiar varias líneas sin los números de línea, desactive los números con :set nonuy luego puede :set nuvolver a habilitarlos una vez que haya terminado de copiar.


1

Puede usar :set mouse&en la línea de comando vim para habilitar copiar / pegar el texto seleccionado con el mouse. Luego puede simplemente usar el botón central del mouse o shiftinsertpegarlo.


Luego, cuando lo tienes :set number, resalta los números. Entonces no mucho bien. Así que deshaces el bien hecho porset mouse=a
barlop

1

La configuración de compilación con la que se compiló vim es parte del problema. vim --versionmuestra estos.

En OSX, el vim predeterminado tiene -clipboard Pero necesitas+clipboard

En osx puedes y aparentemente deberías usar macvim. Puedes hacer brew cask install macvim eso +clipboard.

Tendrás dos vims.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

ejecutar vim ejecutará macvim 'cos /usr/local/bindebería estar antes /usr/binen la ruta, aunque puede verificar con which vim.

ejecutar vim (para ejecutar macvim), está bien, pero es posible que desee asignar vi a macvim porque, de lo contrario, ejecutar vi permanece en el vim predeterminado. Puede reescribir o eliminar (con rm) y recrear el enlace vi sym, con ln. Y para hacerlo sin un error de "operación no permitida", debe deshabilitar (temporalmente) SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

macvim tiene +clipboardcomo se muestra porvim --version

Aquí hay un trabajo ~/.vim/vimrccon solo las líneas requeridas.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

La clave líder predeterminada es la barra invertida.

Leí una sugerencia de que uno debería usar la tecla líder ... (ciertamente el control ya tiene muchas teclas en uso, por lo que la sugerencia era no usar el control. No sé si eso también se aplica a la tecla de comando, pero de todos modos).

Con ese mapeo mencionado, \chará lo "+yque copiará desde el registro conocido como +, al portapapeles. Y\v pegará desde el registro conocido como +.

Así que es una copia / pegar que funciona entre ventanas.

Otro sistema operativo puede requerir en "*lugar de"+


Ambos vims tienen -xterm_clipboard. Quizás a +xterm_clipboardsería beneficioso de alguna manera, pero no le importa a esta solución.
barlop

0

Si está utilizando la sesión Putty, automáticamente copia la selección. Si hemos usado la opción "set mouse = a" en vim, la selección usando Shift + Mouse arrastrar selecciona el texto automáticamente. Necesito verificar en X-term.


0

em ... Sigue presionando Shifty luego haz clic con el botón derecho del mouse


0

Accidentalmente le expliqué cómo apagarlo set mouse=a, cuando volví a leer la pregunta y descubrí que el OP no quería apagarla en primer lugar. De todos modos, para cualquiera que busque cómo apagar el mouse ( set mouse=) centralmente, dejo una referencia a mi respuesta aquí: https://unix.stackexchange.com/a/506723/194822


0

Mantener turno mientras copiaba y pegaba con la selección funcionó para mí


Esto es lo que dice la respuesta aceptada . Para agradecer a un usuario: una vez que tenga esa reputación, podrá votar su publicación.
Wai Ha Lee

0

Añadir set clipboard=unnameda tu .vimrc. Por lo tanto, usará el registro del portapapeles '*' en lugar del registro sin nombre para todas las operaciones de extracción, eliminación, cambio y colocación (tenga en cuenta que no solo afecta al mouse).

El comportamiento del registro '*' depende de su plataforma y de cómo vimse ha compilado (o si usaneovim ).

Si no funciona, puede intentarlo set clipboard=unnamedplus, pero esta opción solo tiene sentido en los sistemas X11.


-3

En el modo ESC, cuando establezca mouse = a, seleccione el texto con el mouse. Esto habilitaría el modo visual en vim. Luego puede presionar 'y' para tirar del texto seleccionado y 'p' para pegarlo donde desee. Esto sucede solo dentro de vim.


no, esto no funcionará cuando pegue fuera de vim
barlop
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.