Deaktivieren der Mausunterstützung in `vim` in einer` gnome-terminal`-Umgebung

47

Bearbeiten: Das Problem mit einer aktivierten Maus vimscheint spezifisch zu sein gnome-terminal(Version 3.4.1.1-1; ich verwende den Gnome 3-Fallback-Modus). Wenn ich laufe xterm, ist die Mausunterstützung in vimstandardmäßig deaktiviert, und ich habe die Option, sie zu aktivieren ( :set mouse=awas ich nie tue) und zu deaktivieren ( :set mouse=). Im Gegensatz dazu , wenn ich laufe vimin gnome-terminalist Maus - Unterstützung standardmäßig aktiviert und es ist nicht möglich , sie zu deaktivieren ( :set mouse=hat keine Wirkung). Gibt es eine Lösung, bei der der Terminalemulator nicht geändert werden muss?


Ich möchte die Mausunterstützung in vollständig deaktivieren vim. Ich verwende vimVersion 2: 7.3.547-3 bis gnome-terminalVersion 3.4.1.1-1. Die folgenden Befehle können .vimrcdie Mausunterstützung nicht deaktivieren , unabhängig davon, ob sie direkt in vim ausgeführt oder meiner Datei hinzugefügt wurden :

set mouse =
set mouse =""

Basierend auf dem Lesen des vim-Handbuchs und der Online-Posts sollten einer oder beide dieser Befehle funktionieren. Im vim-Handbuch heißt es insbesondere:

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

Ich benutze einen Laptop und jedes Mal, wenn meine Hand über das Trackpad streicht, bewegt sich meine Cursorposition in vim abrupt.

user001
quelle

Antworten:

29

Ich habe herausgefunden, was dieses schlechte Verhalten bei vielen Linux-Varianten verursacht:

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

Es ist "Quelle", wenn es keine gibt, ~/.vimrcaber selbst wenn Sie eine /etc/vimrcoder eine solche /etcDatei haben. Wenn Sie keine haben, erstellen Sie einfach eine leere, wie von @lgpasquale vorgeschlagen:

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

Wenn Ihnen die anderen Funktionen (wie die Syntaxhervorhebung) gefallen haben, die Sie von defaults.vim erhalten haben, können Sie den folgenden Befehl verwenden:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || echo -e "source /usr/share/vim/vim80/defaults.vim\nset mouse=" > ~/.vim/vimrc
Gilles Quenot
quelle
2
Danke! Das Auskommentieren der Zeile "mouse -a" in dieser Datei löste das Problem für mich (auf Archlinux)
luckyrumo
1
Sie müssen diese Datei nicht bearbeiten (was Teil von vim-runtime unter Archlinux ist). Wie in dieser Datei angegeben, wird es nur geladen, wenn kein vimrc gefunden wird. Das bedeutet, dass das Ablegen einer .vimrcDatei bei Ihnen zu Hause das Problem lösen sollte (für mich). Es muss nichts enthalten, es kann sogar eine leere Datei sein.
LGPASQUALE
Dies ist die echte Lösung für Fedora 25.
KamikazeCZ
Ich bestätige, dass dies in Debian 8 Ende 2017 für mich funktioniert hat.
Criggie
1
@rlf Meiner Meinung nach /usr/share/ist es eine schlechte Idee, eine Datei zu bearbeiten, unter der Ihr Paketmanager sie verwaltet. Wenn Sie einige der Optionen defaults.vimbeibehalten möchten, kopiere ich sie nach ~/.vimrc.
LGPASQUALE
24

Die Mausunterstützung ist standardmäßig deaktiviert, daher wird sie durch einen Vorgang aktiviert. Wahrscheinlich set mouse=scheitert Ihr System daran, dass es ausgeführt wird, bevor es eingeschaltet wird. Ich würde den Rest Ihres vimrc und möglicherweise das systemweite vimrc ( /etc/vim/vimrcist ein Standardspeicherort) durchsehen .

Als letzten Ausweg können Sie diesen wirklich hässlichen Hack ausführen, der dazu führt, dass der Befehl als eine der letzten Aktionen ausgeführt wird, bevor Sie die Kontrolle über den Editor erlangen.

autocmd BufEnter * set mouse=
Patrick
quelle
2
Meine /etc/vim/vimrcDatei ist ziemlich nackt ( runtime! debian.vimund bedingt if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). Die /etc/vim/vimrc.localDatei existiert nicht auf meinem System. Meine ~/.vimrcDatei enthält nur einige Zeilen, die ich manuell hinzugefügt habe. Eine straceder vimzeigt , dass es in den folgenden Orten für Konfigurationsdateien überprüft: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), und /home/user/.vimrc. (Warum erhalte ich den ENOENT-Fehler if? Verhindert die Anweisung nicht den Versuch, diese nicht vorhandene Datei zu öffnen?)
User001
Sollte :set mouse=dies nicht auch, wenn ich direkt in vim eingebe, die Einstellungen aus den Konfigurationsdateien überschreiben? Warum sollte die direkte Ausführung dieser Anweisung vimdie Maussteuerung nicht deaktivieren?
User001
1
@ user001 Sie sehen, dass der Benutzer ENOENTüberprüfen muss, ob die Datei vorhanden ist. Dies erfolgt normalerweise durch einen Aufruf, statder zurückgibt, ENOENTwenn die Datei nicht vorhanden ist.
Ulrich Dangel
2
@ user001 ah, die Tatsache, dass es nicht funktioniert, wenn es in die aktuelle Sitzung eingegeben wird, ist eine wichtige Information. Aufgrund dessen bin ich mir nicht sicher, ob es das Problem ist. Vielleicht macht das Gnome-Terminal etwas Schreckliches. Können Sie einen anderen Terminalemulator ausprobieren?
Patrick
Hallo, guter Vorschlag. Ich habe es versucht xtermund hatte kein Problem mit der Mausaktivierung. Ich konnte das Problem durch Eingabe reproduziert :set mouse=ain vimLaufen in xterm(und umgekehrt durch Eingabe :set mouse=). Irgendeine Idee, wie man den gnome-terminalFehler behebt? Soll ich einen neuen Thread starten? Vielen Dank.
User001
9

Ich bin auf meinem OS X "Terminal" auf einem Fedora Server 25-Host darauf gestoßen. Ich habe es in meinem .vimrc permanent damit gelöst mit:

set mouse=
set ttymouse=

Jetzt kann ich mit der Maus im Scrollback meines Terminals zu meinem vorherigen Bash-Verlauf blättern.

Robpol86
quelle
Es wird dringend empfohlen, eine vimrc.local im selben Katalog zu erstellen, da vimrc.local nicht aktualisiert wird, wenn vim Updates erhält
Orphans
Es funktionierte für mich auf Raspbian 9.4. Bei anderen Antworten wurde das unerwünschte Verhalten der Maus beim Anmelden über PUTTY nicht behoben.
Dmitry
Für alle anderen, die ausschneiden und einfügen, hatte Note set ttymouse=ein seltsames Verhalten für mich, z. B. verursachte das Verhalten von Pfeiltasten, Escape-Taste zu ändern.
Mozboz
4

Ich hatte fast die gleichen Beschwerden wie Sie über die Empfindlichkeit des neueren Vim gegenüber der Maus. Using set mouse=""hat es auch nicht für mich getan.

Ich habe set mouse=c(keine Anführungszeichen) am Ende meiner .vimrcDatei. Das schien Vim davon abzuhalten, die Maus zu benutzen, außer wenn "PuTTY" verwendet wurde, um von meinem (ugh!) Windows-Rechner bei der Arbeit einzuspielen. Ich muss die Umschalt-Mitteltaste verwenden, um PuTTY einzufügen.

30.03.2018 Bearbeiten: Ich habe jetzt begonnen, :mouse=auf einigen entfernten (CentOS 6.7) Instanzen von vim : (keine Anführungszeichen oder ähnliches ) zu verwenden, um unerwünschte Mauseffekte zu beseitigen .

Bruce Ediger
quelle
Hallo, danke für den Vorschlag. Ich habe dies zu meiner .vimrcDatei hinzugefügt und versucht, sie interaktiv auszuführen ( :set mouse=c), aber in meinem Fall hatte keiner der beiden Auswirkungen.
User001
3

Fügen Sie dies zu Ihrem hinzu .vimrc:

if has("gui_running")
    "echo "yes, we have a GUI"
    set mouse=a
else
    "echo "Boring old console"
    set mouse=
endif
ipirlo
quelle
1
Dies ist für die gestellte Frage nicht relevant.
GKFX
@ GKFX Bist du sicher? Es sieht für mich relevant aus. Beachten Sie, dass has("gui_running")in einer Terminalumgebung 0 ist. Diese Antwort, anders als die anderen, nimmt zusätzlichen Aufwand nur die Maus in einer Terminal - Umgebung zu deaktivieren, die die Frage stellt, während es in gvim aktiviert bleibt.
HDV
@hvd Ich habe meinen Kommentar ein bisschen hart formuliert. Ich entschuldige mich. Diese Antwort setzt jedoch nur einen if-Block um das, was das OP bereits versucht hat, so dass es unwahrscheinlich ist, dass es hilfreich ist.
GKFX
1
@ GKFX Fairer Punkt, und gilt auch für andere Antworten.
HDV
3

Auf debian stretch werden nach dem Laden /etc/vim/vimrcund einige zentrale Einstellungen geladen /etc/vim/vimrc.local. Siehe /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
...

Diese Datei ist standardmäßig /usr/share/vim/vim80/defaults.vim. Jetzt eine zentrale Datei unter wechselnden /usr/share/...heißt

  • böse
  • Nicht permanent, wird nach einem Update zurückgesetzt

Einstellung skip_defaults_vimdurch die obige Zeile uncommentig entfernt alle anderen von dieser Datei festgelegten Optionen. Um nur die unerwünschten Optionen zu entfernen, geben Sie Folgendes ein /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
"...

Dadurch wird das defaults.vimmanuelle Laden und das automatische Laden deaktiviert, sodass Sie alle unerwünschten Einstellungen rückgängig machen können, ohne .vimrcfür jedes Benutzerkonto ein Konto erstellen zu müssen .

Holger Böhnke
quelle
Ihre Antwort gab mir endlich eine echte Lösung für meine Probleme in Debian 10 "Buster". Danke vielmals.
2.
0

Etwas im Zusammenhang mit der Frage, ob Sie Neovim (nvim) verwenden, sollten Sie set mouse=in Ihre ~/.config/nvim/init.vimKonfigurationsdatei einfügen .

Wenn das Verzeichnis nicht existiert, erstellen Sie es mit mkdir -p ~/.config/nvim/

Marcelo Lacerda
quelle