vim cut & paste non funziona in Stretch / Debian 9


33

Aggiornati qui alcuni server VM a Debian 9.

Ora quando si utilizza ssh, non è possibile copiare e incollare tra terminali remoti.

Il cursore sembra fare i movimenti e contrassegnare il testo, anche se in modo più divertente / diverso dal solito, ma nulla viene copiato negli appunti quando si fa il comando-C / comando-V o si copia e incolla nel rispettivo menu .

Abbiamo anche provato a fare i movimenti del mouse con Shift e altre combinazioni di tastiere, senza risultati positivi.

Questo sta accadendo in OS / X, vale a dire Sierra ed El Capitan, e in Windows, usando anche i terminali mobaXterm.

La situazione è dovuta alla consapevolezza di Vim di avere un topo.

A seguito di altre domande in Stack Overflow, ho creato /etc/vim/vimrc.localcon set mouse="r"e set mouse="v; non ha funzionato bene.

Finalmente l'installazione set mouse=""nello stesso file, con un discreto successo.

Tuttavia, inoltre, non funziona bene il 100% delle volte. Cos'altro può essere fatto?


Perché vorresti disattivare il supporto del mouse? Su Windows posso copiare e incollare bene in una sessione di stucco; quale emulatore di terminale stai usando su Mac?
Alexej Magura,

3
Il Terminale normale + il binario ssh che viene fornito di default; Altri 2 compagni di lavoro che si lamentano ... Sono server virtuali senza testa, tutti, solo in modalità testo. Non aver funzionato correttamente taglia e incolla è un grosso problema per noi.
Rui F Ribeiro,

Consiglierei di usare qualcosa come iTerm2 , penso che sia l'unico emulatore di terminale che ho usato oltre al termine retrò che puoi ottenere nell'Apple Store, ma non ricordo se quello supportato copia e incolla su ssh. Dovresti comunque essere in grado di copiare le selezioni dello schermo. Ricordo, tuttavia, debolmente di aver avuto problemi durante il tentativo di copiare schifezze dal terminale al sistema, ho scritto un sacco di funzioni nel mio .zshrc per aiutarlo, ma non sono sicuro che sia proprio quello che stai cercando per.
Alexej Magura,

2
Forse qualcuno può presentare una richiesta per ripristinare questa modifica (in debian?) Per tornare alla mouse=modalità.
Steffen,

Risposte:


37

La soluzione è infatti, impostando l'opzione mouse=asu mouse=r.

Il problema nell'impostare questo /usr/share/vim/vim80/defaults.vimcome dice la risposta accettata è che verrà sovrascritto ad ogni aggiornamento. Ho cercato a lungo e sono finito su questo: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864074

La soluzione in primo luogo è utilizzare i file .vmrc locali e impostarli lì. Quindi puoi creare un .vimrc ( ~/.vimrc) locale per ogni utente e impostare le tue opzioni lì. Oppure creane uno in /etc/skelmodo che venga creato automaticamente per ogni nuovo utente che crei.

Ma quando usi i file .vmrc locali, devi impostare tutte le opzioni lì, perché se c'è un locale .vimrc, il defaults.vimnon viene caricato affatto! E se non c'è locale, .vimrctutte le tue impostazioni vengono sovrascritte defaults.vim.

Volevo una configurazione globale per tutti gli utenti, che carica le opzioni predefinite e quindi aggiunge o sovrascrive le impostazioni predefinite con le mie impostazioni personali. Fortunatamente esiste un'opzione in Debian: The /etc/vim/vimrc.localverrà caricato dopo il /etc/vim/vimrc. Quindi è possibile creare questo file e consentire il caricamento delle impostazioni predefinite, impedire che vengano caricate di nuovo (alla fine) e quindi aggiungere le opzioni personali:

Si prega di creare il seguente file: /etc/vim/vimrc.local

" This file loads the default vim options at the beginning and prevents
" that they are being loaded again later. All other options that will be set,
" are added, or overwrite the default settings. Add as many options as you
" whish at the end of this file.

" Load the defaults
source $VIMRUNTIME/defaults.vim

" Prevent the defaults from being loaded again later, if the user doesn't
" have a local vimrc (~/.vimrc)
let skip_defaults_vim = 1


" Set more options (overwrites settings from /usr/share/vim/vim80/defaults.vim)
" Add as many options as you whish

" Set the mouse mode to 'r'
if has('mouse')
  set mouse=r
endif

(Nota che $VIMRUNTIMEutilizzato nello snippet di cui sopra ha un valore simile /usr/share/vim/vim80/defaults.vim.)

Se vuoi anche abilitare il "vecchio comportamento copia / incolla", aggiungi anche le seguenti righe alla fine di quel file:

" Toggle paste/nopaste automatically when copy/paste with right click in insert mode:
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

4
Questa dovrebbe essere la risposta accettata. Anche dalla tua segnalazione di bug collegata penso che possiamo farcela source $VIMRUNTIME/defaults.vim.
Alasdair,

1
Finalmente sono riuscito a distribuire questo, superbo, ottimo lavoro! +1
Rui F Ribeiro,

2
Funziona ancora in Debian 10, usando solo source /usr/share/vim/vim81/defaults.vim
Rui F Ribeiro,

26

Un modo per eliminare Vim dalla consapevolezza del mouse sembra essere commentare la configurazione del mouse.

In /usr/share/vim/vim80/defaults.vimho commentato il rilevamento specifico del mouse come in:

" In many terminal emulators the mouse works just fine.  By enabling it you
" can position the cursor, Visually select and scroll with the mouse.
"if has('mouse')
"  set mouse=r
"endif

(in quei file di configurazione di vim, "sta iniziando un commento).

La modifica ci ha permesso di copiare e incollare di nuovo senza problemi.

Sono d'accordo con i commenti che questa non è la soluzione ideale, perché in effetti viene sovrascritta in qualsiasi aggiornamento a meno che il file di configurazione non sia protetto (o deviato). All'epoca, e per via delle specifiche di una versione del pacchetto o della configurazione dei server in cui lavoravo, era l'unica a funzionare. In quanto tale, lascio qui questa risposta e dovrebbe essere utilizzata solo come soluzione di ultima istanza .


2
IMO questa è una cattiva risposta! Incoraggiare gli utenti a modificare un file gestito dalla gestione dei pacchetti rischia di rompere inaspettatamente le cose in futuro. @ La risposta I-GaLaXy-I è preferibile.
Jeremy Davis,

1
@JeremyDavis Sono d'accordo con te questa non è la soluzione migliore. All'epoca era l'unico a funzionare, per qualche ragione sconosciuta, e ho provato diverse alternative. Tuttavia, più di una persona ora mi sta dicendo che l'altra soluzione al giorno d'oggi funziona, lo accetto come la risposta corretta. Ho usato le deviazioni in quel momento e il file di configurazione non è stato sovrascritto, tuttavia non è una soluzione ideale.
Rui F Ribeiro,

11

La documentazione di Vim per l' mouseopzione dice

La gestione xterm dei pulsanti del mouse può ancora essere utilizzata tenendo premuto il tasto Maiusc.


Grazie per quello Uso Vim da anni e non ero a conoscenza di quella funzione. Ho modificato la tua domanda per includere più funzioni di formattazione disponibili. Benvenuti in Unix e Linux !
Anthony G - giustizia per Monica il

1
Il problema è che sto usando Terminal in Mac e i miei operatori putty / mobaXterm in Windows ... non xterm
Rui F Ribeiro,

3

Puoi disabilitarlo senza alterare i file di sistema creando /etc/vimrc.locale inserendo quanto segue:

set mouse=

In beta time, non ha funzionato in modo coerente, lo verificherà di nuovo, grazie.
Rui F Ribeiro,

2
Questo non funziona.
Tenworf,

Vedi la risposta di I-GaLaXy-I sopra. Devi importare esplicitamente defaults.vim e impedirne l'importazione.
Richard

Questo funziona bene anche per me, anche se l'ho combinato con la risposta di @ I-GaLaXy-I (ovvero modificato / creato /etc/vim/vimrc.local)
Jeremy Davis

ha funzionato bene per me mentre ero all'interno di un contenitore debian 9 ... basta inserirlo in ~ / .vimrc
Scott Stensland il

1

Many people suggested :set mouse=a but I found that only :set mouse=r enables copy & paste in Vim on Debian 9. Good luck!

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.