Copia di testo al di fuori di Vim con set mouse = a abilitato


232

Dopo l'abilitazione set mouse=a, il testo copiato all'interno di Vim non verrà incollato all'esterno di Vim. Qualcuno sa come risolverlo?

Qui, selezionando il testo con il mouse si attiva la modalità visiva e si disabilita l' Copyopzione nel menu popup:

inserisci qui la descrizione dell'immagine


2
Se il tuo vim è compilato con +clipboarde mouse=a, sarai in grado di copiare / incollare da / a vim senza usare il menu a comparsa del terminale. Puoi verificare se clipboardè abilitato usando vim --version.
Jérôme Pouiller,

@Jezz Vale la pena chiarire che A) mouse=anon è un'opzione di compilazione, è qualcosa in Vimrc B) Quando è stato compilato VIM, +clipboardti consente di copiare / incollare quando :set numberè attivo e senza copiare / incollare i numeri, anche se forse devi ancora fare un po ' mappature C) Non è necessario ricompilare VIM da soli, potrebbe essere attivo in alcuni gestori di pacchetti supportati da qualsiasi sistema operativo. Su osx, brew's vim lo ha, mentre quello predefinito di osx no. La mia risposta menziona questo re osx.
barlop

Forse l'installazione xselfunziona anche per te, puoi selezionare il testo con l'editor o con il mouse e premere ctrl+cper copiare il testo, ad esempio per neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi,

Risposte:


426

Premere shiftmentre si seleziona con il mouse. Questo farà sì che la selezione del mouse si comporti come se mouse=anon fosse abilitata.

Nota: questo trucco vale anche per "incolla pulsante centrale": se si desidera incollare il testo VIM che è stato selezionato all'esterno, premere shiftmentre si fa clic sul pulsante centrale. Assicurati solo che la modalità di inserimento sia attivata quando lo fai (potresti anche voler :set pasteevitare effetti imprevisti).

OS X (mac): tieni premuto alt / opzione mentre selezioni ( sorgente )


2
OK, questa è davvero la soluzione. Ma cosa succede se si desidera selezionare un sacco di codice che è più che sullo schermo? (quindi devi scorrere e selezionare contemporaneamente)
Ozkan

3
C'è anche un'opzione per usare la selezione dei blocchi premendo <kbd> ctrl </kbd> + <kbd> shift </kbd> + tasto sinistro del mouse per iniziare la selezione dei blocchi. Il pulsante centrale del mouse incolla il contenuto copiato in un'altra finestra.
micrub

6
Se disponi di numeri di riga (come mostrato nella schermata), quando selezioni utilizzando ALT su un Mac OS X, vengono copiati anche i numeri di riga. In questo caso è meglio usare ALT + CMD quando si seleziona la modalità Selezione blocco in modo da evitare di selezionare i numeri.
Aaron,

16
Per Mac Terminal, dopo OS X 10.11 El Capitan , la Fnchiave è la strada giusta da percorrere. Vale a dire, (con mouse=aabilitazione) selezionare il testo mentre si preme il Fntasto, quindi utilizzare CMD + C per copiare e incollare dove si desidera.
YaOzI

1
Non so come quella risposta abbia così tanti voti positivi. Se hai abilitato il supporto del mouse per evitare di copiare i numeri di riga, questo suggerimento è totalmente inutile.
Stelios Adamantidis,

49

Usa ", +, ydopo aver effettuato una selezione visuale. Non dovresti comunque usare il comando di copia del terminale, perché copia ciò che il terminale vede invece del contenuto effettivo. Ecco cosa fa questo:

  • ", +dice a Vim di usare il registro chiamato +per la prossima cancellazione, yank o put. Il registro denominato +è un registro speciale, è il registro degli appunti X11. (Su altri sistemi, useresti *invece, penso, vedi :help clipboarde :help x11-selection)
  • y è il comando yank, che dice a Vim di inserire la selezione nel registro precedentemente indicato.

Puoi mapparlo in questo modo:

:vmap <C-C> "+y

Quindi evidenzia qualcosa con il mouse e premi Control-Cper copiarlo.

Questa funzione funziona solo quando Vim è stato compilato con l' +xterm_clipboardopzione. Corri vim --versionper scoprire se ha.


4
O forse a "*yseconda del sistema operativo.
frabjous,

Ha funzionato! Tuttavia, la combinazione è piuttosto complessa, 4 pulsanti in realtà .. Probabilmente ho bisogno di mappare l'altro mentre uso "shift" dall'altra risposta.
Lyuba,

La mappatura funziona perfettamente anche :) :) Ora non so quale delle
tue

2
Per me questa è una soluzione migliore della risposta accettata perché con questo metodo i numeri di riga non vengono copiati.
Saulo Silva,

Che dire +clipboard? E che dire +clipboarddi xterm_clipboardfuori?
barlop

18

Invece di set mouse=ausare set mouse=rin .vimrc


1
Ma disabilita lo scorrimento
Makesh

3
Per favore, dì perché. A prima vista, questo sembra fondamentalmente lo stesso di disabilitare completamente la modalità mouse, che non è il punto della domanda.
Mikel,

@Mikel, vedi la mia risposta anche la risposta di Josh Lee può essere d'aiuto
barlop

Sfortunatamente, questo copierà anche i numeri di riga se sono abilitati.
vikin9

17

Su OSX utilizzare fninvece di shift.


ha funzionato per me con la optionchiave che è l' altequivalente chiave sull'host MacOS. Tuttavia, era un terminale remoto su debian9. non ha funzionato aggiungendo uno dei set mouse=a/ set mouse=rin /etc/vim/vimrcsul telecomando.
mrtipale,

5

In Ubuntu, è possibile utilizzare i collegamenti copia e incolla X-Term all'interno di VIM (Ctrl-Shift-C & Ctrl-Shift-V) su testo oscurato usando il tasto Maiusc.


4

Un'altra opzione OSX-Mac è quella di deselezionare View->Allow Mouse Reporting(o premere ⌘-R per attivarlo). Ciò consente di alternare tra l'interazione del mouse e la selezione del mouse, che potrebbe essere utile quando si seleziona e copia / incolla alcuni bit perché non si dispone per tenere premuto un tasto modificatore per farlo.

Nota per multilinea con numeri di riga:

Di solito ho i numeri di riga abilitati, quindi questo copia anche i numeri di riga se selezioni più righe. Se si desidera copiare più righe senza i numeri di riga, disabilitare i numeri con :set nonue quindi è possibile :set nuriattivarli al termine della copia.


1

È possibile utilizzare :set mouse&nella riga di comando di vim per abilitare la copia / incolla del testo selezionato usando il mouse. Puoi quindi semplicemente usare il pulsante centrale del mouse o shiftinsertincollarlo.


Quindi quando hai :set numberevidenzia i numeri. Quindi non molto bene. Quindi annulli il bene fatto daset mouse=a
barlop

1

Le impostazioni di compilazione con cui è stato compilato vim fanno parte del problema. vim --versionmostra questi.

In OSX, la vim predefinita ha -clipboard Ma devi+clipboard

Su osx puoi e apparentemente generalmente dovresti usare macvim. Puoi farlo brew cask install macvim Quello che ha +clipboard.

Avrai due film.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

eseguendo vim verrà eseguito macvim 'cos /usr/local/bindovrebbe essere prima /usr/binnel percorso, anche se è possibile verificare con which vim.

l'esecuzione di vim (per eseguire macvim), va bene, ma potresti voler mappare vi a macvim 'cos altrimenti l'esecuzione di vi rimane al vim predefinito! È possibile riscrivere o eliminare (con rm) e ricreare il collegamento vi sym, con ln. E per farlo senza un errore "operazione non consentita", devi (temporaneamente) disattivare SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

macvim ha +clipboardcome mostrato davim --version

Ecco un lavoro ~/.vim/vimrccon solo le linee richieste.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

La chiave principale predefinita è una barra rovesciata.

Ho letto un suggerimento che si dovrebbe usare la chiave leader .. (certamente il controllo ha molte chiavi già in uso, quindi il suggerimento era di non usare il controllo. Non so se ciò si applichi anche alla chiave di comando, ma comunque).

Con quella mappatura menzionata, \cfarà ciò "+yche verrà copiato dal registro noto come +, negli Appunti. E \vincollerà dal registro noto come +.

Quindi questa è una copia / incolla che funziona tra Windows.

Potrebbe essere necessario un altro sistema operativo "*anziché"+


Entrambi i film hanno -xterm_clipboard. Forse a +xterm_clipboardsarebbe utile in qualche modo, ma non importa per questa soluzione.
barlop

0

Se si utilizza, sessione Putty, quindi copia automaticamente la selezione. Se abbiamo usato l'opzione "set mouse = a" in vim, selezionando usando Maiusc + trascinamento del mouse si seleziona automaticamente il testo. È necessario controllare X-term.


0

em ... Continua a premere Shifte poi fai clic con il tasto destro del mouse


0

Ho accidentalmente spiegato come spegnere set mouse=a, quando ho riletto la domanda e ho scoperto che l'OP non voleva spegnerlo in primo luogo. Comunque, per chiunque cerchi come spegnere il mouse ( set mouse=) centralmente, lascio qui un riferimento alla mia risposta: https://unix.stackexchange.com/a/506723/194822


0

Tenere premuto il turno mentre si copia e incolla con la selezione ha funzionato per me


Questo è ciò che dice la risposta accettata . Per ringraziare un utente - una volta che hai una tale reputazione, sarai in grado di votare il loro post.
Wai Ha Lee,

0

Aggiungi set clipboard=unnamedal tuo .vimrc. Quindi userà il registro degli appunti '*' invece del registro senza nome per tutte le operazioni di yank, delete, change e put (nota che non riguarda solo il mouse).

Il comportamento del registro '*' dipende dalla tua piattaforma e da come vimè stato compilato (o se lo usi neovim).

Se non funziona, puoi provare set clipboard=unnamedplus, ma questa opzione ha senso solo sui sistemi X11.


-3

In modalità ESC, quando si imposta mouse = a, selezionare il testo usando il mouse. Ciò consentirebbe la modalità visiva in vim. Quindi puoi premere 'y' per strappare il testo selezionato e 'p' per incollarlo dove vuoi. Questo succede solo all'interno di vim.


no, questo non funzionerà quando si incolla al di fuori di vim
barlop
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.