disabilitando il supporto del mouse in `vim` in un ambiente` gnome-terminal`


47

Modifica: il problema di un mouse abilitato vimsembra essere specifico per gnome-terminal(versione 3.4.1.1-1; sto usando la modalità fallback di gnome 3). Se corro xterm, il supporto del mouse in vimè disabilitato di default e ho la possibilità di abilitarlo ( :set mouse=acosa che non faccio mai) e disabilitarlo ( :set mouse=). Al contrario, quando si esegue vimin gnome-terminal, supporto del mouse è abilitata di default e non è possibile disattivarlo ( :set mouse=non ha effetto). Esiste una soluzione a meno di modificare l'emulatore di terminale?


Voglio disabilitare completamente il supporto del mouse in vim. Sto eseguendo la vimversione 2: 7.3.547-3 attraverso la gnome-terminalversione 3.4.1.1-1. I seguenti comandi, eseguiti direttamente in vim o aggiunti al mio .vimrcfile, non disabilitano il supporto del mouse:

set mouse =
set mouse =""

Sulla base della lettura del manuale di vim e dei post online, uno o entrambi questi comandi dovrebbero funzionare. In particolare, il manuale di vim afferma quanto segue

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

Sto usando un laptop e ogni volta che la mia mano sfiora il trackpad, la posizione del cursore in vim si sposta bruscamente.

Risposte:


29

Ho trovato che cosa causa questo cattivo comportamento con molti gusti di Linux:

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

è "di provenienza" se non esiste, ~/.vimrcma anche se si dispone di un file /etc/vimrcsimile /etc, quindi se non si dispone di uno, crearne uno vuoto come suggerito da @lgpasquale:

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

Se ti sono piaciute le altre funzionalità (come l'evidenziazione della sintassi) che hai ottenuto da defaults.vim, puoi usare questo comando piuttosto che il precedente:

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

2
Grazie! Commentare la riga "mouse -a" in quel file ha risolto il problema per me (su Archlinux)
luckyrumo,

1
Non è necessario modificare quel file (che fa parte di vim-runtime su archlinux). Come indicato in quel file, viene caricato solo se non viene trovato vimrc. Ciò significa che il posizionamento di un .vimrcfile in casa dovrebbe risolvere il problema (lo ha fatto per me). Non deve contenere nulla, può anche essere un file vuoto.
lgpasquale,

Questa è la vera soluzione per Fedora 25.
KamikazeCZ

Confermo che questo ha funzionato per me in Debian 8 alla fine del 2017.
Criggie,

1
@rlf A mio avviso, modificare un file in base al /usr/share/quale è gestito dal gestore pacchetti è una cattiva idea. Se vuoi mantenere alcune delle opzioni defaults.vim, le copierei ~/.vimrc.
lgpasquale,

24

il supporto del mouse è disabilitato per impostazione predefinita, quindi qualcosa lo sta accendendo. Probabilmente il motivo per cui stai set mouse=fallendo è perché è in esecuzione prima di qualsiasi cosa lo accenda. Guarderei attraverso il resto del tuo vimrc, e probabilmente l'intero sistema vimrc ( /etc/vim/vimrcè una posizione standard).

Come ultima risorsa, puoi fare questo brutto hack che farà eseguire il comando come una delle ultime cose fatte prima di darti il ​​controllo dell'editor.

autocmd BufEnter * set mouse=

2
Il mio /etc/vim/vimrcfile è piuttosto nudo ( runtime! debian.vime un condizionale if filereadable("/etc/vim/vimrc.local") ; source /etc/vim/vimrc.local; endif). Il /etc/vim/vimrc.localfile non esiste sul mio sistema. Il mio ~/.vimrcfile ha solo poche righe che ho aggiunto manualmente. Una stracedelle vimrivela che controlla i seguenti percorsi per i file di configurazione: /usr/share/vim/vimrc, /etc/vim/vimrc.local( ENOENT ), e /home/user/.vimrc. (Perché ricevo l'errore ENOENT; l' ifistruzione non impedisce i tentativi di apertura di questo file inesistente?).
user001

Inoltre, se digito :set mouse=direttamente in vim, questo non dovrebbe sovrascrivere le impostazioni dai file di configurazione? Perché l'esecuzione diretta di questa istruzione all'interno di vimnon disabiliterebbe il controllo del mouse?
user001

1
@ user001 Vedi ENOENTcome vim deve controllare se il file esiste. Questo in genere viene fatto chiamando chiamando statche restituisce ENOENTse il file non esiste.
Ulrich Dangel,

2
@ user001 ah, il fatto che non funzioni quando viene digitato nella sessione corrente è un'informazione fondamentale. Sulla base di questo, non sono sicuro che sia questo il problema. Forse gnome-terminal sta facendo qualcosa di orribile. Puoi provare un emulatore di terminale diverso?
Patrick,

Ciao, buon consiglio. Ho provato xterme non ho avuto problemi con l'attivazione del mouse. Potrei riprodurre il problema digitando :set mouse=ain vimrodaggio xterm(e invertendolo digitando :set mouse=). Qualche idea su come risolvere il gnome-terminalproblema tecnico? Devo iniziare una nuova discussione? Grazie.
user001

9

Mi sono imbattuto in questo sulla mia app "Terminale" OS X su un host Fedora Server 25. L'ho risolto definitivamente con questo nel mio .vimrc con:

set mouse=
set ttymouse=

Ora posso scorrere fino alla mia precedente cronologia bash nello scrollback del mio terminale con il mouse.


Si consiglia vivamente di creare un vimrc.local nello stesso catalogo, perché vimrc.local non verrà aggiornato se vim ottiene aggiornamenti
Orphans,

Ha funzionato per me su Raspbian 9.4. Altre risposte non hanno risolto il comportamento indesiderato del mouse quando accedo tramite PUTTY.
Dmitry,

Per chiunque altro abbia tagliato e incollato, la nota ha set ttymouse=avuto un comportamento strano per me, ad esempio ha causato il comportamento dei tasti freccia, il tasto Esc per cambiare.
mozboz,

4

Avevo più o meno le tue stesse lamentele riguardo alla più recente sensibilità di Vim al mouse. Anche l'utilizzo set mouse=""non l'ha fatto per me.

Ho set mouse=c(senza virgolette) vicino alla fine del mio .vimrcfile. Ciò sembrava impedire a Vim di usare il mouse, tranne quando si utilizza "PuTTY" per accedere alla mia macchina Windows (ugh!) Al lavoro. Devo usare il tasto centrale maiusc per incollare in PuTTY.

30-03-2018 Modifica: ora ho iniziato a usare: :mouse=(senza virgolette o altro) su alcune istanze remote (CentOS 6.7) di VIM per sbarazzarmi degli effetti del mouse indesiderati.


Ciao, grazie per il suggerimento. Ho aggiunto questo al mio .vimrcfile e ho provato a eseguirlo interattivamente ( :set mouse=c), ma nessuno dei due ha avuto un effetto nel mio caso.
user001

3

Aggiungi questo al tuo .vimrc:

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

1
Ciò non ha alcuna rilevanza per la domanda posta.
GKFX,

@GKFX Sei sicuro? Mi sembra rilevante. Si noti che has("gui_running")è 0 in un ambiente terminale. Questa risposta, a differenza delle altre, richiede uno sforzo supplementare per solo disattivare il mouse in un ambiente terminale, che la questione si chiede, pur lasciando abilitato gvim.
hvd,

@hvd Ho formulato un po 'duramente il mio commento; Chiedo scusa. Tuttavia, questa risposta mette solo un blocco if attorno a ciò che l'OP aveva già provato, quindi è improbabile che sia utile.
GKFX,

1
@GKFX Fair point, e si applica anche ad altre risposte.
hvd,

3

A debian stretch alcune impostazioni centrali vengono caricate dopo il caricamento /etc/vim/vimrce /etc/vim/vimrc.local. Vedi /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
...

Per impostazione predefinita, questo file è /usr/share/vim/vim80/defaults.vim. Ora la modifica di un file centrale in /usr/share/...è

  • il male
  • non permanente, viene ripristinato dopo un aggiornamento

Impostando skip_defaults_vimdecommentig la riga sopra rimuove tutte le altre opzioni impostate da quel file. Per rimuovere semplicemente le opzioni indesiderate inserisci quanto segue /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
"...

Questo carica defaults.vimmanualmente e disattiva il caricamento automatico, dandoti così la possibilità di ripristinare qualsiasi impostazione indesiderata, senza dover creare un .vimrcaccount per ogni utente.


La tua risposta finalmente mi ha dato una vera soluzione ai miei problemi in Debian 10 "Buster". Molte grazie.
aef

0

In qualche modo correlato alla domanda, se stai usando neovim (nvim) dovresti inserire il set mouse=tuo ~/.config/nvim/init.vimfile di configurazione.

Se la directory non esiste, crearla con mkdir -p ~/.config/nvim/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.