deshabilitar el soporte del mouse en `vim` en un entorno` gnome-terminal`

47

Editar: El problema de un mouse habilitado vimparece ser específico de gnome-terminal(versión 3.4.1.1-1; estoy usando el modo de respaldo de gnome 3). Si ejecuto xterm, la compatibilidad con el mouse vimestá deshabilitada de manera predeterminada, y tengo la opción de habilitarla ( :set mouse=alo que nunca hago) y deshabilitarla ( :set mouse=). Por el contrario, cuando corro vimen gnome-terminal, soporte de ratón se activa por defecto y no es posible desactivarlo ( :set mouse=no tiene efecto). ¿Existe alguna solución que no sea cambiar el emulador de terminal?


Quiero deshabilitar completamente la compatibilidad con el mouse en vim. Estoy ejecutando la vimversión 2: 7.3.547-3 a través de la gnome-terminalversión 3.4.1.1-1. Los siguientes comandos, ejecutados directamente en vim o agregados a mi .vimrcarchivo, no pueden desactivar la compatibilidad con el mouse:

set mouse =
set mouse =""

Según la lectura del manual de vim y las publicaciones en línea, uno o ambos de estos comandos deberían funcionar. En particular, el manual de vim establece lo siguiente

'mouse'                 string  (default "", "a" for GUI, MS-DOS and Win32)
    The mouse can be enabled for different modes:
            n       Normal mode
            v       Visual mode
            i       Insert mode
            c       Command-line mode
            h       all previous modes when editing a help file
            a       all previous modes
            r       for |hit-enter| and |more-prompt| prompt 
    Normally you would enable the mouse in all four modes with: >
            :set mouse=a
    When the mouse is not enabled, the GUI will still use the mouse for
    modeless selection.  This doesn't move the text cursor.

Estoy usando una computadora portátil y cada vez que mi mano toca el trackpad, mi posición del cursor en vim se mueve abruptamente.

user001
fuente

Respuestas:

29

He encontrado la causa de este mal comportamiento con muchos sabores de Linux:

/usr/share/vim/vim80/defaults.vim # may be "vim81" depending on your vim version

se 'obtiene' si no existe, ~/.vimrcpero incluso si tiene un archivo /etc/vimrco tal /etc, así que si no tiene uno, simplemente cree uno en blanco como lo sugiere @lgpasquale:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || :> ~/.vim/vimrc

Si le gustaron las otras características (como el resaltado de sintaxis) que obtuvo de defaults.vim, puede usar este comando en lugar del anterior:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || echo -e "source /usr/share/vim/vim80/defaults.vim\nset mouse=" > ~/.vim/vimrc
Gilles Quenot
fuente
2
¡Gracias! Comentar la línea "mouse -a" en ese archivo me resolvió el problema (en Archlinux)
luckyrumo
1
No necesita editar ese archivo (que es parte de vim-runtime en archlinux). Como se indica en ese archivo, solo se carga si no se encuentra vimrc. Eso significa que colocar un .vimrcarchivo en su hogar debería resolver el problema (lo hizo para mí). No necesita contener nada, incluso puede ser un archivo vacío.
lgpasquale
Esta es la solución real para Fedora 25.
KamikazeCZ
Confirmo que esto funcionó para mí en Debian 8 a fines de 2017.
Criggie
1
@rlf En mi opinión, editar un archivo bajo el /usr/share/cual es administrado por su administrador de paquetes es una mala idea. Si desea conservar algunas de las opciones defaults.vim, las copiaría en ~/.vimrc.
lgpasquale
24

el soporte del mouse está deshabilitado de forma predeterminada, por lo que algo lo está activando. Probablemente la razón por la que set mouse=está fallando es porque se está ejecutando antes de lo que sea que lo esté encendiendo. Examinaría el resto de su vimrc, y posiblemente el vimrc de todo el sistema ( /etc/vim/vimrces una ubicación estándar).

Como último recurso, puede hacer este truco realmente feo que hará que el comando se ejecute como una de las últimas cosas antes de darle el control del editor.

autocmd BufEnter * set mouse=
Patricio
fuente
2
Mi /etc/vim/vimrcarchivo es bastante simple ( runtime! debian.vimy condicional if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). El /etc/vim/vimrc.localarchivo no existe en mi sistema. Mi ~/.vimrcarchivo solo tiene unas pocas líneas que he agregado manualmente. Una stracede las vimrevela que comprueba las siguientes ubicaciones para los archivos de configuración: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), y /home/user/.vimrc. (¿Por qué recibo el error ENOENT; la ifdeclaración no impide los intentos de abrir este archivo inexistente?).
user001
Además, si :set mouse=escribo directamente en vim, ¿no debería esto anular cualquier configuración de los archivos de configuración? ¿Por qué la ejecución directa de esta declaración vimno deshabilita el control del mouse?
user001
1
@ user001 Usted ve ENOENTcomo vim tiene que verificar si el archivo existe. Esto normalmente se realiza llamando a statque devuelve ENOENTsi el archivo no existe.
Ulrich Dangel
2
@ user001 ah, el hecho de que no funciona cuando se escribe en la sesión actual es información crítica. Basado en esto, no estoy seguro de que ese sea el problema. Quizás gnome-terminal está haciendo algo horrible. ¿Puedes probar un emulador de terminal diferente?
Patrick
Hola buena sugerencia Lo intenté xtermy no tuve ningún problema con la activación del mouse. Podría reproducir el problema escribiendo :set mouse=aen vimejecución xterm(y revertirlo escribiendo :set mouse=). ¿Alguna idea de cómo solucionar el problema gnome-terminaltécnico? ¿Debo comenzar un nuevo hilo? Gracias.
user001
9

Me encontré con esto en mi aplicación OS X "Terminal" en un servidor Fedora Server 25. Lo resolví permanentemente con esto en mi .vimrc con:

set mouse=
set ttymouse=

Ahora puedo desplazarme hacia mi historial de bash anterior en el desplazamiento hacia atrás de mi terminal con el mouse.

Robpol86
fuente
Se recomienda encarecidamente crear un vimrc.local en el mismo catálogo, porque vimrc.local no se actualizará si vim recibe actualizaciones
Huérfanos
A mí me funcionó en Raspbian 9.4. Otras respuestas no resolvieron el comportamiento no deseado del mouse cuando inicio sesión mediante PUTTY.
Dmitry
Para cualquier otra persona que cortó y pegó, la nota set ttymouse=tuvo un comportamiento extraño para mí, por ejemplo, causó el comportamiento de las teclas de flecha, la tecla de escape para cambiar.
mozboz
4

Tenía más o menos las mismas quejas sobre la nueva sensibilidad de Vim al ratón. Usar set mouse=""tampoco lo hizo por mí.

Tengo set mouse=c(sin comillas) cerca del final de mi .vimrcarchivo. Eso parecía evitar que Vim usara el mouse, excepto cuando usaba "PuTTY" para ingresar desde mi (¡uf!) Máquina de Windows en el trabajo. Tengo que usar shift-middle-button para pegar en PuTTY.

30-03-2018 Editar: ahora he comenzado a usar: :mouse=(sin comillas ni nada) en algunas instancias remotas (CentOS 6.7) de vim para eliminar los efectos no deseados del mouse.

Bruce Ediger
fuente
Hola, gracias por la sugerencia. Agregué esto a mi .vimrcarchivo e intenté ejecutarlo de manera interactiva ( :set mouse=c), pero ninguno tuvo efecto en mi caso.
user001
3

Agregue esto a su .vimrc:

if has("gui_running")
    "echo "yes, we have a GUI"
    set mouse=a
else
    "echo "Boring old console"
    set mouse=
endif
ipirlo
fuente
1
Esto no es relevante para la pregunta formulada.
GKFX
@GKFX ¿Estás seguro? Me parece relevante. Tenga en cuenta que has("gui_running")es 0 en un entorno terminal. Esta respuesta, a diferencia de las otras, requiere un esfuerzo adicional para deshabilitar solo el mouse en un entorno de terminal, lo que plantea la pregunta, mientras lo deja habilitado en gvim.
hvd
@hvd Redacté mi comentario un poco con dureza; Me disculpo. Sin embargo, esta respuesta solo pone un bloque if alrededor de lo que el OP ya había intentado, por lo que es poco probable que sea útil.
GKFX
1
@GKFX Punto justo, y se aplica también a otras respuestas.
hvd
3

En Debian Stret se cargan algunas configuraciones centrales después de cargar /etc/vim/vimrcy /etc/vim/vimrc.local. Ver /etc/vim/vimrc:

...
" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc.
" This happens after /etc/vim/vimrc(.local) are loaded, so it will override
" any settings in these files.
" If you don't want that to happen, uncomment the below line to prevent
" defaults.vim from being loaded.
"let g:skip_defaults_vim = 1
...

Este archivo tiene el valor predeterminado /usr/share/vim/vim80/defaults.vim. Ahora cambiar un archivo central en /usr/share/...es

  • mal
  • no permanente, se revierte después de una actualización

Al establecer sin skip_defaults_vimcomentar la línea anterior, se eliminan todas las demás opciones establecidas por ese archivo. Para eliminar las opciones no deseadas, ingrese lo siguiente /etc/vimrc.local:

" /etc/vim/vimrc.local
" honor skip_defaults_vim from the master /etc/vim/vimrc file
if ! exists('skip_defaults_vim')
  " Source the defaults file manually from here
  source $VIMRUNTIME/defaults.vim
endif

" avoid loading the defaults twice
let g:skip_defaults_vim = 1

" revert any unwanted changes the defaults file introduced
set mouse=

" set any other options you want centrally on your system
"set paste " uncomment if you want paste insert enabled
"...

Esto carga el defaults.vimmanual y apaga la carga automática, lo que le da la oportunidad de revertir cualquier configuración no deseada, sin tener que crear una .vimrcpara cada cuenta de usuario.

Holger Böhnke
fuente
Su respuesta finalmente me dio una solución real a mis problemas en Debian 10 "Buster". Muchas gracias.
aef
0

Algo relacionado con la pregunta, si está utilizando neovim (nvim), debe incluir set mouse=su ~/.config/nvim/init.vimarchivo de configuración.

Si el directorio no existe, créelo con mkdir -p ~/.config/nvim/

Marcelo Lacerda
fuente