C'è un modo per copiare un blocco di testo negli Appunti di sistema, così posso incollarlo in un altro programma?
cpip
, cpi{
.
C'è un modo per copiare un blocco di testo negli Appunti di sistema, così posso incollarlo in un altro programma?
cpip
, cpi{
.
Risposte:
Per i sistemi basati su X11 (es. Linux e la maggior parte degli altri sistemi simili a UNIX ) ci sono due appunti che sono indipendenti l'uno dall'altro:
^C
e incollato con ^V
(È come MS Windows).I sistemi OS X e Windows hanno solo un blocco appunti.
Per i sistemi X11 ci sono anche numerosi strumenti che sincronizzano questi appunti per te; quindi se sembrano essere gli stessi, potresti averne uno in esecuzione.
Vim ha due registri speciali corrispondenti a questi appunti:
*
usa PRIMARY; mnemonico: S tar è S eletti (per copia-on- s eletto)+
usa CLIPBOARD; mnemonico: CTRL PLUS C (per il keybind comune)Su Windows e OS X non vi è alcuna differenza tra +
e *
, poiché questi sistemi hanno solo un singolo blocco appunti ed entrambi i registri si riferiscono alla stessa cosa (non importa quale si utilizza).
È possibile utilizzare questi registri come qualsiasi registro. Ad esempio, utilizzando gli Appunti PRIMARY *
con i comandi y
e p
:
"*yy
"*p
Potresti forse usarlo come combinazioni di tasti più convenienti:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
Se si desidera interfacciarsi "automaticamente" con gli Appunti del sistema anziché fare riferimento ad esso manualmente in qualsiasi momento, è possibile impostare la clipboard
variabile:
unnamed
l'uso *
(PRIMARY, su select)unnamedplus
l'uso +
(CLIPBOARD, ^C
)Ora, solo usando yy
andrà negli appunti del sistema, invece del registro senza nome di Vim, e p
incollerà gli appunti del sistema.
Puoi anche assegnare a questi registri proprio come qualsiasi registro con let
:
:let @+=42
:let @*=42
L' clipboard
impostazione ha alcune altre opzioni (come i filtri di esclusione); ma queste sono le basi. Vedi :help 'clipboard'
per la storia completa ;-)
Se si utilizza gVim, è possibile ottenere un comportamento di copia su selezione durante l'utilizzo
:set guioptions+=a
.
Questo è abilitato di default sui sistemi X11 (copie su PRIMARY), ma non su MS Windows e OSX (poiché la selezione di qualsiasi testo sovrascriverebbe gli Appunti).
+clipboard
?Vim richiede il +clipboard
flag di funzionalità per far funzionare tutto ciò; puoi verificare se il tuo Vim ha questo usando :echo has('clipboard')
da Vim (se l'output è 0
, non è presente, se lo è 1
, lo è) o controllando l'output di
vim --version
per +clipboard
.
La maggior parte delle distribuzioni Linux viene fornita con una build Vim "minima" per impostazione predefinita, che non ha +clipboard
, ma di solito è possibile installarla:
vim-gtk
o vim-gnome
.vim-X11
ed esegui vimx
invece di vim
( maggiori informazioni ).gvim
(questo abiliterà anche +clipboard
per il normale vim
).È inoltre possibile utilizzare xclip
, xcopy
o xsel
per copiare il testo negli Appunti; vedere le seguenti domande per le soluzioni:
È inoltre possibile utilizzare gli Appunti su macchine remote se si abilita l'inoltro X11 su SSH. Ciò è particolarmente utile con il suggerimento sopra dato che è quindi possibile utilizzare
xclip
per accedere agli Appunti del desktop. Il Vim sulla macchina che stai cercando avrà ancora bisogno della +clipboard
funzione.
Ciò richiede l' ForwardX11Trusted
impostazione e deve essere eseguito solo con server attendibili , poiché ciò fornisce al server il controllo quasi completo sulla sessione X11:
$ ssh -XY myhost
Per rendere persistenti queste impostazioni (quindi non è necessario aggiungerle -XY
ogni volta), potresti fare qualcosa del genere nel tuo ~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim ha rinnovato il supporto degli appunti. L'interfaccia incorporata è stato rimosso e sostituito con un sistema che chiama un'utilità esterno come xclip
, xsel
o
pbcopy
/ pbpaste
.
Dovrebbe raccogliere automaticamente queste utility e usarle. Su OS X pbcopy
e pbpaste
dovrebbe essere disponibile per impostazione predefinita, su Linux probabilmente desideri installarlo xclip
, poiché è il più ampiamente disponibile (in realtà ci sono due
versioni di xsel
con flag incompatibili . Questo è davvero stupido).
Vedi anche :help clipboard
in Neovim.
"<Space>
per ottenere un "
. Quindi in quei casi dovresti premere "<Space>+y
o "<Space>*y
copiare.
"
può selezionare molti registri nominati. "+
non è magico, è solo un registro +
. Così, per esempio, se si desidera copiare tre cose allo stesso tempo e incollare ciascuno di loro uno per uno, è possibile "1y
, "2y
ed "3y
e più tardi "1p
, "2p
e "3p
. Questo è davvero potente e inesistente in quasi tutti gli altri editor. Un altro uso interessante è guardare le macro memorizzate. Ad esempio, se registri con qq
, ma ti rendi conto che devi correggerlo, puoi: in una linea temporanea "qp
, ripararlo e "qd
.
Le altre risposte spiegano come copiare il testo dal buffer negli Appunti di sistema. Un'altra operazione comune è quella di copiare il testo da un altro registro negli Appunti. Ad esempio, se hai già strappato del testo "
(il registro predefinito), potresti voler caricare quel registro negli appunti.
Puoi farlo con :let
:
let @+=@"
- copia il registro predefinito negli appuntilet @*=@"
- copia il registro predefinito nella selezione primaria X11 ("appunti del mouse")let @+=@a
- copia dal registro a
negli appuntiNota che questo funziona per i registri in generale: let @a=@b
copia il registro b
per registrarti a
.
Da http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
Ciò modifica il registro Vim predefinito nel +
registro, che è collegato agli Appunti di sistema. Da :h clipboard-unnamedplus
:
clipboard-unnamedplus
unnamedplus A variant of the "unnamed" flag which uses the
clipboard register '+' (quoteplus) instead of
register '*' for all yank, delete, change and put
operations which would normally go to the unnamed
register. When "unnamed" is also included to the
option, yank operations (but not delete, change or
put) will additionally copy the text into register
'*'.
Only available with the +X11 feature.
Availability can be checked with:
if has('unnamedplus')
:version
Vim per vedere se + X11 appare nell'elenco delle funzionalità incluse. Puoi anche verificare se la funzione 'unnamedplus' è disponibile con :if has('unnamedplus')⏎ echo 'yes'⏎ endif
Se non sei su Linux, dovresti usare unnamed invece di unnamedplus.
Nelle build che lo supportano, il registro denominato *
è negli Appunti di sistema. Per copiare il testo da Vim negli Appunti di sistema, è possibile selezionare il testo usando la modalità visiva, quindi premere "*yper copiarlo negli Appunti di sistema.
Al contrario, utilizzare "*pper incollare il testo dagli Appunti di sistema in Vim.
Ti consiglio di usare Gvim e di aggiungerlo a .vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
Questo consente il supporto per CtrlC, CtrlX, CtrlVcome Blocco note di Windows.
Nota che questo aggiungerà anche alcune altre scorciatoie comuni di Windows, come CtrlSfor :w
, CtrlAper selezionare tutto, ecc.
Ogni altra risposta ha coperto tutte le cose importanti sui registri. Vorrei aggiungere un'altra cosa che uso.
C'è un modo in Vim per copiare direttamente negli Appunti il testo selezionato visivamente . Metti questo nel tuo file vimrc :
set guioptions+=a
E, con questo ogni volta che selezioni visivamente del testo, questo verrà copiato negli appunti. Per ulteriori informazioni su questo,:help guioptions
A proposito, questo è solo per gVim.
guioptions+=a
è anche menzionato nella risposta di Carpetsmoker.
Puoi anche usare un comando globale per inserire un motivo specifico negli appunti. Può essere utile in situazioni in cui hai informazioni sparse in un file e la gestione manuale è soggetta a errori e stanchezza.
Pulisci prima il registro che riceverà le informazioni
:let @a=""
Quindi copia tutte le righe contenenti il motivo su di esso
:g/pattern/yank A
Infine, trasferire (copiare) le informazioni negli Appunti di sistema
:let @+=@a
se provi a copiare ogni riga contenente un "pattern" direttamente negli Appunti, non funzionerà perché gli Appunti non hanno la capacità di aggiungere nuovi contenuti, quindi stiamo usando qui un normale registro VIM per memorizzare tutte le linee che contengono il modello in una volta e poi mettendolo negli appunti.
OBS: è necessario clastare il registro prima di utilizzarlo e l'uso della versione MAIUSCOLA del registro ci consente di aggiungere contenuto, altrimenti non funzionerà neanche.
Se non riesci a capire come andare +clipboard
al lavoro, cosa che non ho potuto per qualche motivo, allora puoi farlo.
Supponendo che tu voglia solo copiare una sezione del file, faccio shift
+ v
per entrare in modalità visiva ed evidenziare solo le linee che voglio copiare. Quindi faccio questo.
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
Spiegazione
'<,'>
- significa che hai utilizzato la modalità visiva per selezionare un intervallo (non digitare questo)w !{cmd}
- scrivere l'intervallo sullo stdin di cmd
, vedere di più su:help w_c
wl-copy
e xclip
sono programmi a cui puoi reindirizzare il testo e lo aggiungeranno agli appunti di sistemaInoltre, una volta che questo è nella tua storia, non devi digitare di nuovo l'intera cosa. Basta selezionare con la modalità visiva, digitare w
quindi premere su e il comando dovrebbe essere completato automaticamente. Inoltre, non è necessario utilizzare la modalità visiva. È possibile impostare qualsiasi intervallo desiderato.