vim cut & paste no funciona en Stretch / Debian 9


33

Actualicé aquí algunos servidores VM a Debian 9.

Ahora cuando se usa ssh, no podemos copiar y pegar entre terminales remotos.

El cursor parece estar haciendo los movimientos y marcando el texto, aunque de una manera más divertida / diferente a la habitual, pero nada se copia en el portapapeles al hacer el comando-C / comando-V o copiar y pegar en el menú respectivo .

También intentamos hacer los movimientos del mouse con Shift y otras combinaciones de teclado, sin resultados positivos.

Esto está sucediendo en OS / X, es decir, Sierra y El Capitán, y en Windows, usando terminales mobaXterm también.

La situación se debe a la conciencia de vim de tener un mouse.

Siguiendo otras preguntas en Stack Overflow, creé /etc/vim/vimrc.localcon set mouse="r"y set mouse="v; No funcionó bien.

Finalmente configurado set mouse=""en el mismo archivo, con un éxito moderado.

Sin embargo, tampoco funciona bien el 100% del tiempo. Qué más se puede hacer?


¿Por qué querrías desactivar el soporte del mouse? En Windows puedo copiar y pegar muy bien en una sesión de masilla; ¿Qué emulador de terminal estás usando en Mac?
Alexej Magura

3
La Terminal regular + el binario ssh que viene por defecto; Dos compañeros de trabajo más se quejan ... Son servidores virtuales sin cabeza, todos ellos, solo modo texto. No tener cortar y pegar funcionando correctamente es un gran problema para nosotros.
Rui F Ribeiro

Recomiendo usar algo como iTerm2 , creo que ese es el único emulador de terminal que utilicé aparte del término retro que puedes obtener en la tienda de Apple, pero no recuerdo si ese era compatible con copiar y pegar sobre ssh. Sin embargo, aún debería poder copiar las selecciones de pantalla. Sin embargo, recuerdo levemente haber tenido problemas al intentar copiar basura del terminal al sistema, escribí un montón de funciones en mi .zshrc para ayudar a facilitarlo, pero no estoy seguro de si eso es lo que realmente estás buscando para.
Alexej Magura

2
Quizás alguien pueda presentar una solicitud para revertir este cambio (¿en debian?) Para volver al mouse=modo.
steffen

Respuestas:


37

La solución es, de hecho, establecer la opción mouse=aen mouse=r.

El problema al configurar esto en el /usr/share/vim/vim80/defaults.vimcomo dice la respuesta aceptada, es que se sobrescribirá en cada actualización. Busqué mucho tiempo y terminé en este: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

La solución de la primera manera es usar archivos .vmrc locales y configurarlos allí. Por lo tanto, puede crear un .vimrc ( ~/.vimrc) local para cada usuario y configurar sus opciones allí. O cree uno /etc/skelpara que se cree automáticamente para cada nuevo usuario que cree.

Pero cuando usa archivos .vmrc locales, debe configurar todas las opciones allí, porque si hay un local .vimrc, ¡ defaults.vimno se carga en absoluto! Y si no hay local, .vimrcse sobrescribirán todas sus configuraciones defaults.vim.

Quería una configuración global para todos los usuarios, que carga las opciones predeterminadas y luego agrega o sobrescribe los valores predeterminados con mi configuración personal. Afortunadamente, hay una opción para eso en Debian: /etc/vim/vimrc.localse cargará después de /etc/vim/vimrc. Para que pueda crear este archivo y dejar que se carguen los valores predeterminados, evitar que se vuelvan a cargar (al final) y luego agregar sus opciones personales:

Por favor cree el siguiente archivo: /etc/vim/vimrc.local

" This file loads the default vim options at the beginning and prevents
" that they are being loaded again later. All other options that will be set,
" are added, or overwrite the default settings. Add as many options as you
" whish at the end of this file.

" Load the defaults
source $VIMRUNTIME/defaults.vim

" Prevent the defaults from being loaded again later, if the user doesn't
" have a local vimrc (~/.vimrc)
let skip_defaults_vim = 1


" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
" Add as many options as you whish

" Set the mouse mode to 'r'
if has('mouse')
  set mouse=r
endif

(Tenga $VIMRUNTIMEen cuenta que el que se usa en el fragmento anterior tiene un valor similar a /usr/share/vim/vim80/defaults.vim).

Si también desea habilitar el "antiguo comportamiento de copiar / pegar", agregue también las siguientes líneas al final de ese archivo:

" Toggle paste/nopaste automatically when copy/paste with right click in insert mode:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

44
Esta debería ser la respuesta aceptada. También de su informe de error vinculado creo que podemos salirse con la suya source $VIMRUNTIME/defaults.vim.
Alasdair

1
¡Finalmente logré desplegar este excelente trabajo excelente! +1
Rui F Ribeiro

2
Todavía trabajando en Debian 10, solo usando la fuente /usr/share/vim/vim81/defaults.vim
Rui F Ribeiro

26

Una forma de cortar vim de la conciencia del mouse parece estar comentando la configuración sobre el mouse.

En /usr/share/vim/vim80/defaults.vimcomenté la detección específica del mouse como en:

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
"if has('mouse')
"  set mouse=r
"endif

(en esos archivos de configuración de vim, "está iniciando un comentario).

El cambio nos ha permitido copiar y pegar nuevamente sin ningún problema.

Estoy de acuerdo con los comentarios, esta no es la solución ideal, debido a que se sobrescribe en cualquier actualización a menos que el archivo de configuración esté protegido (o desviado). En ese momento, y debido a detalles específicos de una versión del paquete o de la configuración de los servidores donde solía trabajar, fue el único que funcionó. Como tal, dejo esta respuesta aquí, y solo debe usarse como una solución de último recurso .


2
OMI, esta es una mala respuesta! Es probable que alentar a los usuarios a editar un archivo manejado por la administración de paquetes rompa las cosas inesperadamente en el futuro. @ I-GaLaXy-I respuesta es preferible.
Jeremy Davis

1
@JeremyDavis Estoy de acuerdo con usted, esta no es la mejor solución. En ese momento, fue el único que funcionó, por alguna razón desconocida, y probé varias alternativas. Sin embargo, si más de una persona ahora me dice que la otra solución funciona hoy en día, la estoy aceptando como la respuesta correcta. Usé desvíos en ese momento, y el archivo de configuración no se sobrescribió, sin embargo, esa tampoco es una solución ideal.
Rui F Ribeiro

11

La documentación de Vim para la mouseopción dice

El manejo xterm de los botones del mouse todavía se puede usar manteniendo presionada la tecla Mayús.


Gracias por eso. He estado usando Vim durante años y no estaba al tanto de esa característica. Edité su pregunta para incorporar más funciones de formato que están disponibles. ¡Bienvenido a Unix y Linux !
Anthony G - justicia para Monica

1
El problema es que estoy usando Terminal en Mac y mis operadores putty / mobaXterm en Windows ... no xterm
Rui F Ribeiro

3

Puede deshabilitar esto sin alterar los archivos del sistema creando /etc/vimrc.locale insertando lo siguiente:

set mouse=

En tiempo beta, no funcionó de manera consistente, lo comprobará nuevamente, gracias.
Rui F Ribeiro

2
Esto no funciona.
LtWorf

Vea la respuesta de I-GaLaXy-I arriba. Debe importar explícitamente defaults.vim y evitar que se importe.
Richard

Esto también funciona bien para mí, aunque lo combiné con la respuesta de @ I-GaLaXy-I (es decir, editado / creado /etc/vim/vimrc.local)
Jeremy Davis

funcionó bien para mí mientras estaba dentro de un contenedor Debian 9 ... solo póngalo en ~ / .vimrc
Scott Stensland

1

Mucha gente sugirió, :set mouse=apero descubrí que solo :set mouse=rpermite copiar y pegar en Vim en Debian 9. ¡Buena suerte!

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.