wyłączanie obsługi myszy w `vim` w środowisku` gnome-terminal`


47

Edycja: Problem z włączoną myszą vimwydaje się być specyficzny dla gnome-terminal(wersja 3.4.1.1-1; Używam trybu awaryjnego gnome 3). Jeśli uruchomię xterm, obsługa myszy w vimjest domyślnie wyłączona i mam opcję, aby ją włączyć ( :set mouse=aczego nigdy nie robię) i wyłączyć ( :set mouse=). W przeciwieństwie do tego, kiedy biegnę vimna gnome-terminalwsparcie myszy jest domyślnie włączona i nie jest możliwe, aby ją wyłączyć ( :set mouse=nie ma wpływu). Czy brakuje rozwiązania zmieniającego emulator terminala?


Chcę całkowicie wyłączyć obsługę myszy w vim. vimKorzystam z wersji 2: 7.3.547-3 do gnome-terminalwersji 3.4.1.1-1. Następujące polecenia, wykonane bezpośrednio w vimie lub dodane do mojego .vimrcpliku, nie wyłączają obsługi myszy:

set mouse =
set mouse =""

Na podstawie przeczytania instrukcji vima i postów online, jedno lub oba z tych poleceń powinny działać. W szczególności instrukcja vim zawiera następujące informacje

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

Używam laptopa i za każdym razem, gdy moja ręka szczotkuje gładzik, moja pozycja kursora w vimie gwałtownie się porusza.

Odpowiedzi:


29

Znalazłem przyczynę tego złego zachowania w przypadku wielu smaków linuksowych:

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

jest „pozyskiwany”, jeśli nie ma, ~/.vimrcale nawet jeśli masz /etc/vimrctaki /etcplik, więc jeśli go nie masz, po prostu utwórz pusty, jak sugeruje @lgpasquale:

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

Jeśli podobały Ci się inne funkcje (takie jak podświetlanie składni), które otrzymałeś z defaults.vim, możesz użyć tego polecenia zamiast poprzedniego:

mkdir ~/.vim/; [[ -s ~/.vim/vimrc ]] && echo "aborted, file exists" || echo -e "source /usr/share/vim/vim80/defaults.vim\nset mouse=" > ~/.vim/vimrc

2
Dziękuję Ci! Komentowanie linii „mysz -a” w tym pliku rozwiązało problem dla mnie (w Archlinux)
luckyrumo

1
Nie musisz edytować tego pliku (który jest częścią vim-runtime na archlinux). Jak podano w tym pliku, jest on ładowany tylko wtedy, gdy nie znaleziono vimrc. Oznacza to, że umieszczenie .vimrcpliku w domu powinno rozwiązać problem (zrobiło to dla mnie). Nie musi zawierać niczego, może nawet być pustym plikiem.
lgpasquale,

To jest prawdziwe rozwiązanie dla Fedory 25.
KamikazeCZ

Potwierdzam, że zadziałało to w Debianie 8 pod koniec 2017 r.
Criggie

1
@rlf Moim zdaniem edytowanie pliku, pod /usr/share/którym zarządza menedżer pakietów, jest złym pomysłem. Jeśli chcesz zachować niektóre opcje defaults.vim, skopiowałbym je ~/.vimrc.
lgpasquale

24

obsługa myszy jest domyślnie wyłączona, więc coś ją włącza. Prawdopodobnie przyczyną set mouse=niepowodzenia jest to, że działa zanim cokolwiek go włączy. Przejrzałbym resztę twojego vimrc i ewentualnie systemowy vimrc ( /etc/vim/vimrcjest to standardowa lokalizacja).

W ostateczności możesz wykonać ten naprawdę brzydki hack, który spowoduje, że polecenie będzie działać jako jedna z ostatnich czynności, zanim przejmiesz kontrolę nad edytorem.

autocmd BufEnter * set mouse=

2
Mój /etc/vim/vimrcplik jest całkiem nagi ( runtime! debian.vimi warunkowy if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). /etc/vim/vimrc.localPlik nie istnieje w moim systemie. Mój ~/.vimrcplik ma tylko kilka wierszy, które dodałem ręcznie. straceOd vimujawnia, że sprawdza następujące lokalizacje dla plików config: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ) i /home/user/.vimrc. (Dlaczego pojawia się błąd ENOENT; czy ifinstrukcja nie uniemożliwia prób otwarcia tego nieistniejącego pliku?).
user001

Ponadto, jeśli piszę :set mouse=bezpośrednio w vimie, czy nie powinno to zastąpić żadnych ustawień z plików konfiguracyjnych? Dlaczego bezpośrednie wykonanie tego polecenia vimnie wyłącza kontroli myszy?
user001

1
@ user001 Widzisz, ENOENTjak vim musi sprawdzić, czy plik istnieje. Zazwyczaj wykonuje się to przez wywołanie, statktóre zwraca, ENOENTjeśli plik nie istnieje.
Ulrich Dangel

2
@ user001 ah, fakt, że nie działa po wpisaniu do bieżącej sesji, jest krytyczną informacją. Na tej podstawie nie jestem pewien, czy to vim jest problemem. Może gnom-terminal robi coś okropnego. Czy możesz wypróbować inny emulator terminala?
Patrick

Cześć, dobra sugestia. Próbowałem xtermi nie miałem problemu z aktywacją myszy. Mógłbym odtworzyć problem, pisząc :set mouse=apodczas vimuruchamiania xterm(i odwróć, pisząc :set mouse=). Masz pomysł, jak rozwiązać problem z gnome-terminalusterką? Czy powinienem zacząć nowy wątek? Dzięki.
user001

9

Natknąłem się na to w mojej aplikacji „Terminal” OS X na hoście Fedora Server 25. Rozwiązałem to na stałe w moim .vimrc z:

set mouse=
set ttymouse=

Teraz mogę przewijać do poprzedniej historii bash w przewijaniu mojego terminala za pomocą myszy.


Zdecydowanie zaleca się utworzenie pliku vimrc.local w tym samym katalogu, ponieważ plik vimrc.local nie zostanie zaktualizowany, jeśli vim otrzyma aktualizacje
Orphans

To działało dla mnie w Raspbian 9.4. Inne odpowiedzi nie rozwiązały niepożądanego zachowania myszy, gdy loguję się przez PUTTY.
Dmitry

Dla każdego innego, kto wycinał i wklejał, notatka set ttymouse=miała dla mnie dziwne zachowanie, np. Powodowało zachowanie klawiszy strzałek, klawisz Escape, aby zmienić.
mozboz

4

Miałem prawie takie same skargi jak ty na wrażliwość nowego Vima na mysz. Używanie set mouse=""też mi tego nie zrobiło.

Mam set mouse=c(bez cudzysłowów) blisko dolnej części mojego .vimrcpliku. To zdawało się powstrzymywać Vima przed używaniem myszy, z wyjątkiem sytuacji, gdy używasz „PuTTY” do ssh in z mojego (ugh!) Komputera z systemem Windows w pracy. Muszę użyć środkowego przycisku shift do wklejenia w PuTTY.

2018-03-30 Edycja: Teraz zacząłem używać: :mouse=(bez cudzysłowów lub czegokolwiek) na niektórych zdalnych (v CentOS 6.7) instancjach vima, aby pozbyć się niepożądanych efektów myszy.


Cześć, dzięki za sugestię. Dodałem to do mojego .vimrcpliku i próbowałem uruchomić interaktywnie ( :set mouse=c), ale w moim przypadku żadne z nich nie miało żadnego efektu.
user001

3

Dodaj to do .vimrc:

if has("gui_running")
    "echo "yes, we have a GUI"
    set mouse=a
else
    "echo "Boring old console"
    set mouse=
endif

1
Nie ma to znaczenia dla zadanego pytania.
GKFX

@GKFX Czy jesteś pewien? Wygląda mi to na trafne. Zauważ, że has("gui_running")w środowisku terminalowym jest 0. Odpowiedź ta, w przeciwieństwie do innych, zajmuje dodatkowego wysiłku, aby tylko wyłączyć mysz w środowisku terminala, którego pytanie dotyczy kwestii, pozostawiając włączony gvim.
hvd

@hvd Sformułowałem swój komentarz nieco ostro; Przepraszam. Jednak ta odpowiedź po prostu blokuje to, co OP już próbował, więc raczej nie będzie pomocne.
GKFX

1
@GKFX Uczciwy punkt i dotyczy również innych odpowiedzi.
hvd

3

Podczas debian stretch niektóre centralne ustawienia są ładowane po załadowaniu /etc/vim/vimrci /etc/vim/vimrc.local. Zobacz /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
...

Domyślnie ten plik /usr/share/vim/vim80/defaults.vim. Teraz zmienia plik centralny pod /usr/share/...Is

  • zło
  • niestałe, zostaje przywrócone po aktualizacji

Ustawienie skip_defaults_vimprzez odkomentowanie powyższej linii usuwa wszystkie inne opcje ustawione przez ten plik. Aby po prostu usunąć niechciane opcje, umieść w /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
"...

Spowoduje to defaults.vimręczne załadowanie i wyłączenie automatycznego ładowania, co daje szansę przywrócenia niepożądanych ustawień bez konieczności tworzenia .vimrckonta dla każdego konta użytkownika.


Twoja odpowiedź wreszcie dała mi prawdziwe rozwiązanie moich problemów w Debianie 10 „Buster”. Wielkie dzięki.
aef

0

Nieco związane z pytaniem, jeśli używasz neovim (nvim), powinieneś umieścić set mouse=w ~/.config/nvim/init.vimpliku konfiguracyjnym.

Jeśli katalog nie istnieje, utwórz go mkdir -p ~/.config/nvim/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.