désactiver le support de la souris dans `vim` dans un environnement` gnome-terminal`

47

Edit: Le problème de la souris activée vimsemble être spécifique à gnome-terminal(version 3.4.1.1-1; j'utilise le mode de repli de gnome 3). Si je lance xterm, le support de la souris vimest désactivé par défaut, et j'ai la possibilité de l'activer ( :set mouse=ace que je ne fais jamais) et de le désactiver ( :set mouse=). En revanche, quand je lance vimdans gnome-terminal, support de la souris est activée par défaut et il est impossible de le désactiver ( :set mouse=n'a pas d' effet). Existe-t-il une solution à part changer d'émulateur de terminal?


Je souhaite désactiver complètement le support de la souris dans vim. J'utilise la vimversion 2: 7.3.547-3 à la gnome-terminalversion 3.4.1.1-1. Les commandes suivantes, qu'elles soient exécutées directement dans vim ou ajoutées à mon .vimrcfichier, ne permettent pas de désactiver le support de la souris:

set mouse =
set mouse =""

Selon la lecture du manuel de vim et les publications en ligne, l’une ou l’autre de ces commandes devrait fonctionner. En particulier, le manuel vim indique ce qui suit:

'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.

J'utilise un ordinateur portable et chaque fois que ma main touche le trackpad, la position du curseur dans vim se déplace brusquement.

utilisateur001
la source

Réponses:

29

J'ai trouvé la cause de ce mauvais comportement avec de nombreuses versions de Linux:

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

c'est 'sourced' s'il n'y en a pas, ~/.vimrcmême si vous avez un /etc/vimrcou plusieurs /etcfichiers, alors si vous n'en avez pas, créez-en un vierge comme suggéré par @lgpasquale:

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

Si vous avez aimé les autres fonctionnalités (telles que la coloration syntaxique) que vous avez obtenues avec defaults.vim, vous pouvez utiliser cette commande plutôt que la précédente:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || echo -e "source /usr/share/vim/vim80/defaults.vim\nset mouse=" > ~/.vim/vimrc
Gilles Quenot
la source
2
Je vous remercie! Commenter la ligne "souris -a" dans ce fichier a résolu le problème pour moi (sur Archlinux)
luckyrumo
1
Vous n'avez pas besoin de modifier ce fichier (qui fait partie de vim-runtime sur archlinux). Comme indiqué dans ce fichier, il n'est chargé que si vimrc n'est pas trouvé. Cela signifie que le fait de placer un .vimrcfichier chez vous devrait résoudre le problème (cela a été le cas pour moi). Il n'a pas besoin de contenir quoi que ce soit, il peut même s'agir d'un fichier vide.
lgpasquale
C'est la vraie solution pour Fedora 25.
KamikazeCZ
Je confirme que cela a fonctionné pour moi dans Debian 8 à la fin de 2017.
Criggie
1
@rlf À mon avis, éditer un fichier sous /usr/share/lequel est géré votre gestionnaire de paquets est une mauvaise idée. Si vous souhaitez conserver certaines des options defaults.vim, je les copierais dans ~/.vimrc.
lgpasquale
24

la prise en charge de la souris est désactivée par défaut, donc quelque chose l’allume. La raison pour laquelle vous set mouse=échouez est probablement parce qu'il fonctionne avant tout ce qui l'allume. Je regarderais à travers le reste de votre vimrc, et éventuellement le système vimrc ( /etc/vim/vimrcest un emplacement standard).

En dernier recours, vous pouvez effectuer ce hack vraiment laid, ce qui entraînera l'exécution de la commande comme l'une des dernières choses à effectuer avant de vous donner le contrôle de l'éditeur.

autocmd BufEnter * set mouse=
Patrick
la source
2
Mon /etc/vim/vimrcdossier est plutôt dépouillé ( runtime! debian.vimet conditionnel if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). Le /etc/vim/vimrc.localfichier n'existe pas sur mon système. Mon ~/.vimrcfichier ne contient que quelques lignes que j'ai ajoutées manuellement. Un stracedes vimrévèle qu'il vérifie les emplacements suivants pour les fichiers de configuration: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ) et /home/user/.vimrc. (Pourquoi est-ce que je reçois l'erreur ENOENT; la ifdéclaration n'empêche- t-elle pas les tentatives d'ouverture de ce fichier inexistant?).
user001
De plus, si je tape :set mouse=directement dans vim, cela ne devrait-il pas remplacer les paramètres des fichiers de configuration? Pourquoi l'exécution directe de cette instruction au sein de vimne pas désactiver le contrôle de la souris?
user001
1
@ user001 Vous voyez ENOENTque As vim doit vérifier si le fichier existe. Cela se fait généralement en appelant statce qui retourne ENOENTsi le fichier n'existe pas.
Ulrich Dangel
2
@ user001 ah, le fait que cela ne fonctionne pas une fois tapé dans la session en cours est une information critique. Sur cette base, je ne suis pas sûr que vim soit le problème. Peut-être que gnome-terminal fait quelque chose d'horrible. Pouvez-vous essayer un autre émulateur de terminal?
Patrick
Bonjour, bonne suggestion. J'ai essayé xtermet n'ai eu aucun problème avec l'activation de la souris. Je pourrais reproduire le problème en tapant :set mouse=adans l' vimexécution xterm(et l'inverser en tapant :set mouse=). Une idée de comment résoudre le gnome-terminalproblème? Devrais-je commencer un nouveau fil? Merci.
user001
9

Je me suis heurté à cela sur mon application "Terminal" OS X sur un hôte Fedora Server 25. Je l'ai définitivement résolu avec ceci dans mon fichier .vimrc avec:

set mouse=
set ttymouse=

Maintenant, je peux faire défiler mon historique bash précédent dans le défilement de mon terminal avec la souris.

Robpol86
la source
Il est fortement recommandé de créer vimrc.local dans le même catalogue, car vimrc.local ne sera pas mis à jour si vim reçoit des mises à jour
Orphans
Cela a fonctionné pour moi sur Raspbian 9.4. D'autres réponses n'ont pas résolu le comportement indésirable de la souris lorsque je me connecte via PUTTY.
Dmitry
Pour tout le monde qui set ttymouse=faisait du copier-coller, note avait un comportement étrange pour moi, par exemple le comportement des touches fléchées, la touche d'échappement à changer.
mozboz
4

J'avais à peu près les mêmes plaintes que vous au sujet de la sensibilité de la nouvelle Vim à la souris. L'utilisation set mouse=""ne l'a pas fait pour moi non plus.

J'ai set mouse=c(pas de guillemets) près du bas de mon .vimrcdossier. Cela semblait empêcher Vim d’utiliser la souris, sauf lorsqu’on utilisait "PuTTY" pour entrer en ssh depuis ma (foutue!) Machine Windows au travail. Je dois utiliser shift-middle-button pour coller dans PuTTY.

2018-03-30 Edit: J'ai maintenant commencé à utiliser: :mouse=(sans guillemets ni quoi que ce soit) sur certaines instances distantes (CentOS 6.7) de vim pour supprimer les effets de souris indésirables.

Bruce Ediger
la source
Bonjour, merci pour la suggestion. J'ai ajouté ceci à mon .vimrcfichier et j'ai essayé de l'exécuter de manière interactive ( :set mouse=c), mais cela n'a eu aucun effet dans mon cas.
user001
3

Ajoutez ceci à votre .vimrc:

if has("gui_running")
    "echo "yes, we have a GUI"
    set mouse=a
else
    "echo "Boring old console"
    set mouse=
endif
ipirlo
la source
1
Ceci n’a aucun rapport avec la question posée.
GKFX
@GKFX Êtes-vous sûr? Cela me semble pertinent. Notez que has("gui_running")0 est dans un environnement terminal. Cette réponse, contrairement aux autres, demande un effort supplémentaire pour ne désactiver la souris que dans un environnement terminal, ce que la question demande, tout en la laissant activée dans gvim.
hvd
@hvd j'ai formulé mon commentaire un peu sévèrement; Je m'excuse. Cependant, cette réponse ne fait que mettre un bloc si autour de ce que le PO avait déjà essayé, il est donc peu probable que cela soit utile.
GKFX
1
@GKFX Fair Point, et s'applique également à d'autres réponses.
hvd le
3

Sur Debian Stretch, certains paramètres centraux sont chargés après le chargement /etc/vim/vimrcet /etc/vim/vimrc.local. Voir /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
...

La valeur par défaut de ce fichier est /usr/share/vim/vim80/defaults.vim. Changer un fichier central /usr/share/...est maintenant

  • mal
  • non permanent, il est annulé après une mise à jour

Définir skip_defaults_vimen décommentant la ligne ci-dessus supprime toutes les autres options définies par ce fichier. Pour supprimer simplement les options indésirables, insérez ce qui suit dans /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
"...

Cela charge defaults.vimmanuellement et éteint le chargement automatique, vous donnant ainsi la possibilité de rétablir les paramètres indésirables, sans avoir à créer un compte .vimrcpour chaque utilisateur.

Holger Böhnke
la source
Votre réponse m'a enfin apporté une vraie solution à mes problèmes dans Debian 10 "Buster". Merci beaucoup.
aef
0

Un peu en rapport avec la question, si vous utilisez neovim (nvim), vous devriez mettre set mouse=dans votre ~/.config/nvim/init.vimfichier de configuration.

Si le répertoire n'existe pas, créez-le avec mkdir -p ~/.config/nvim/

Marcelo Lacerda
la source