Copia tutte le righe negli appunti


565

Esiste un modo per copiare tutte le righe da file aperto a appunti nell'editor VI. Ho provato yGma non sta usando gli Appunti per memorizzare quelle righe.

Quindi è possibile?



1
Se siete su Windows e Yank non funziona, vedere la risposta del 17 ° dall'alto: stackoverflow.com/questions/1620018/...
Noumeno

Risposte:


636

Dovresti spostare il testo nei registri* o :+

gg"*yG

Spiegazione:

  • gg per portare il cursore sul primo carattere del file
  • "*yper avviare un comando yank nel registro *dalla prima riga, fino a ...
  • G per andare alla fine del file

6
Come si contrassegna il testo in modo che appaia come una chiave? Non l'ho ancora visto su SO.
Jergason,

10
Ciao ... non funziona? I dati degli Appunti rimangono inalterati. quando digito il cursore gg passa alla prima riga ... ma quando digito "* yG ..cpu emette un segnale acustico su * .. è normale o qualche problema con il mio vim? Sono su Ubuntu ..
Xinus

1
Deadkeys è abilitato? (ad esempio, quando si preme 'a si ottiene á) In tal caso, è necessario premere spazio dopo ".
Tordek,

144
Vim può accedere agli Appunti di sistema solo se è compilato con xterm_clipboard abilitato. Per scoprire se hai questa funzione, esegui :versionvim e cerca la +xterm_clipboardbandiera. Se è preceduto da un segno meno, non avrai questa funzionalità. In questo caso, potresti voler compilare vim da solo o eseguire gvim che di solito ha questa funzione abilitata.
nelstrom,

9
Il problema con questo approccio è che sposta il cursore e scorre la finestra. Due volte. L' altra risposta ha molte meno battiture e svantaggi :)
vedi il

696

Uso:

:%y+

strappare tutte le linee.

Spiegazione:

  • % per fare riferimento al comando successivo per lavorare su tutte le linee
  • y strappare quelle righe
  • + per copiare negli appunti di sistema

NB : in Windows, +e *sono equivalenti vedi questa risposta .


19
Inoltre non cambierà la posizione del cursore.
nperson325681,

1
@guangnan: questi registri non esistono in vi; solo in vim. Prova a digitare :helpper assicurarti di essere effettivamente in vim.
Conspicuous Compiler

6
Ne avevo bisogno set clipboard=unnamed, ma poi ha funzionato alla grande!
cdunn2001

235
Vim dice E850: Invalid register name:(
lony

23
Questa soluzione funziona solo se vim è stato compilato con l'opzione Appunti (vim --version mostrerà + appunti in quel caso). In caso contrario, la soluzione di Brian (:% w! Pbcopy) è una soluzione per Mac. Sono disponibili alternative per altri sistemi operativi (ad esempio xclip).
Yaccob,

90

su Mac

  • copia parte selezionata: seleziona visivamente il testo (digita vo Vin modalità normale) e digita:w !pbcopy

  • copia l'intero file :%w !pbcopy

  • passato dagli appunti :r !pbpaste


6
Funziona senza problemi. Una spiegazione dei comandi sarebbe davvero piacevole.
Vlad Manuel Mureșan,

5
@Geo pbcopyè un'utilità per Mac. Su Linux, xselinvece , potrebbe funzionare o clipsu Windows.
David Lord,

1
Questo non funzionerà se il file è più lungo dell'altezza del tuo terminale.
Sridhar Sarnobat,

1
@SridharSarnobat :%w !pbcopyfunziona ancora se il file è più lungo dell'altezza del terminale.
Adrian Schmidt,

Oh scusa, intendevo su ssh dove il client è un Mac e il server è Linux (che supponevo fosse ciò che l'OP stava cercando, ma ora che ci penso, è un problema non correlato). A mia difesa, eviterei VIM per copiare e incollare file locali, ma è un mio gusto personale. Buoni consigli
Sridhar Sarnobat,

56

Gli appunti sono buffer +. Per copiare negli appunti, fare "+ye [movimento].

Quindi, gg"+yGcopierà l'intero file.

Allo stesso modo, per incollare dagli appunti, "+p


4
Solo per aggiungere a questo (4 anni dopo ...), questo ha un leggero inconveniente in quanto la posizione del cursore salterà in cima al file. Per evitarlo (ad es. Se lo stai mappando su qualche scorciatoia nel tuo vimrc), puoi fare qualcosa del tipo: mqgg "+ yG`q
Tom Lord

46

Un altro modo semplice per copiare l'intero file in caso di problemi con VI, è semplicemente digitando "cat nomefile". Riecheggerà il file sullo schermo e quindi potrai semplicemente scorrere su e giù e copiare / incollare.


1
E603:: cattura senza: prova
Paul Chris Jones,

2
E se si vuole fare questo senza lasciare vim, è possibile eseguire il seguente comando: :!cat %. E per copiare il contenuto del file programmaticamente negli Appunti su Mac OS::!cat % | pbcopy
TanguyP,

Necessario per copiare file da Ubuntu VM su Windows a Debian in GCP aperto nella finestra del browser ...: / Le variazioni di vim yanking non funzionavano, funzionava per incollare su Windows e caricare file su GCP.
frmbelz,

31

Questo è quello che faccio per strappare l'intero file:

ggVGy

12
Temo che questo non risponda alla domanda, dato che stai facendo uno strattone al registro predefinito, non agli appunti.
Conspicuous Compiler,

2
@ConspicuousCompiler sarebbe se avesse il clipboardset in cui copiare il testo strappato +.
TankorSmash

@TankorSmash non è il metodo più veloce (:% y) né più pulito (almeno ggyG è migliore).
pedroapero,

@ConspicuousCompiler qual è la differenza tra registro predefinito e appunti ?
nilon,

17

Puoi usare il comando "cat" per aprire il file e usare il mouse per copiarlo


5
Ma questo non sarà il modo "vi", se il file è enorme, allora sarà anche un problema ... Potrebbe funzionare ma non è un modo suggerito ...
Aditya,

1
resetil terminale in anticipo, quindi selezionare tutto e copiare. Questo funziona attraverso la sshsessione.
arcol

Il modo più veloce per file di grandi dimensioni (meno di 10 mila righe) in diversi server remoti se xterm_clipboard non è disponibile
Matias Haeussler

10

(in risposta a @rshdev, e per evitare di dover ricompilare vim con + xterm_clipboard per @nelstrom nei commenti su OP)

c'è un programma chiamato xclip che funziona come putclip su Ubuntu 11:

:%!xclip -sel clip
u

non è installato per impostazione predefinita. per installare, utilizzare:

sudo apt-get install xclip

10

Su Ubuntu 12

potresti provare a installare il vim-gnomepacchetto:

sudo apt-get install vim-gnome

L'ho provato, perché vim --versionmi ha detto che avrebbe disabilitato il flag xterm_clipboard (indicato da - ), necessario per utilizzare la funzionalità degli Appunti.

-> l'installazione del pacchetto vim-gnome su Ubuntu 12 ha anche installato una versione di vim basata su console, con questa opzione abilitata (indicata da un + prima del flag xterm_clipboard)

Su Arch Linux

è possibile installare vim-clipboardper lo stesso motivo.

Se esegui neovim, dovresti installare xclip(come spiegato da help clipboard-tool)


1
unix.stackexchange.com/questions/25965/… c'è qualche altra opzione che qualcuno conosce?
Sandip Pingle,

6

Se stai usando Vim in modalità visiva, si applicano anche i tasti taglia e incolla standard, almeno con Windows.

  • CTRLA significa "Contrassegna l'intero file.
  • CTRLC significa "Copia la selezione.
  • ESC significa "Deseleziona, quindi la prossima pressione del tasto non sostituisce l'intero file :-)

Sotto almeno il terminale Ubuntu (Gnome), funziona anche la copia standard ( CTRLSHIFTCanche se non sembra esserci una scorciatoia da tastiera standard select all(diversa da quella ALTEseguita da A).


6
Ma se non stai usando mswin.vim, allora ctrl-a incrementa il numero successivo sulla riga corrente.
Mark Rushakoff,

@Mark, questo comportamento proviene da un'installazione standard di Vim, quindi presumo sia l'impostazione predefinita. Tutte le scommesse sono disattivate se l'ambiente è configurato in modo diverso, anche se in tal caso, sospetto che l'OP saprebbe cosa stanno facendo :-) In entrambi i casi, OP ha dichiarato in un commento che erano su Ubuntu, quindi la parte Windows di la mia risposta probabilmente non si applica. La roba terminale di Gnome sarebbe.
paxdiablo,

5

puoi premere gg per localizzare il tuo cursore all'inizio del file, quindi premere yG per copiare tutto il contenuto dall'inizio alla fine (posizione G) in buffer. buona fortuna!


4

Ho provato alcuni dei comandi che la gente ha menzionato sopra. Nessuno ha funzionato. Poi mi sono procurato il più semplice di tutti.

Passaggio 1: vi <filename>
Passaggio 2: fare clic con il tasto destro sulla barra del titolo della finestra di Putty
Passaggio 3: selezionare "Cancella scorrimento" (per evitare di copiare il resto della sessione SSH)
Passaggio 4: fare nuovamente clic con il tasto destro del mouse e selezionare "Copia tutto negli Appunti".


1
Per un file di 15000 righe, questo non ha afferrato tutto. Avevo bisogno di aumentare il mio Putty Window > Settings > lines of scrollbacka 40000 (disponibile anche facendo clic con il tasto destro sulla barra del titolo). Aiuta anche a usare al catposto di vi poiché scorre tutto il testo.
Noumenon,

1
Ho finito per perdere sempre le righe dalla parte superiore e inferiore del file in questo modo. Quello che faccio ora è cat, quindi fai clic con il pulsante centrale all'inizio e alla fine del file per estendere la selezione.
Noumenon,

Quando ho provato questo ho ottenuto solo le 111 righe sullo schermo ma ci sono 174 righe nel mio file, quindi la risposta del gatto di Noumenon ha funzionato per me
seizethecarp,

3

:%y aCopia tutto il contenuto nel buffer di VIM, premendo pin modalità comando incollerai il contenuto strappato dopo la linea su cui si trova attualmente il cursore.


3

gVim:

:set go=a

ggVG

Vedi :help go-a:

'a' Autoselect:  If present, then whenever VISUAL mode is started,
 or the Visual area extended, Vim tries to become the owner of
 the windowing system's global selection.  This means that the
 Visually highlighted text is available for pasting into other
 applications as well as into Vim itself.  When the Visual mode
 ends, possibly due to an operation on the text, or when an
 application wants to paste the selection, the highlighted text
 is automatically yanked into the "* selection register.
 Thus the selection is still available for pasting into other
 applications after the VISUAL mode has ended.
     If not present, then Vim won't become the owner of the
 windowing system's global selection unless explicitly told to
 by a yank or delete operation for the "* register.
 The same applies to the modeless selection.

3

Bene, tutti questi approcci sono interessanti, tuttavia come programmatore pigro uso yank all line usando la combinazione di numero + y

ad esempio hai un file di codice sorgente con un totale di 78 righe, puoi fare come di seguito:

  1. gg per ottenere il cursore sulla prima riga
  2. inserisci 78 + y -> strappa 78 righe sotto il cursore e la riga corrente

2

Non c'era un concetto di "appunti" nel vi di Bill Joy, quindi non credo che ci sia un modo integrato per farlo.

La funzione automatica copia-qualsiasi-evidenziata-negli-appunti di gVim è più semplice o usa un programma esterno tramite:!

Per Cygwin's Vim che uso

:%!putclip
u

Forse Ubuntu ha un'app CLI come putclip ??


ottimo consiglio, grazie! esiste un tale programma, chiamato xclip. per i dettagli, ho pubblicato una risposta separata (sarebbe stato troppo confuso leggere da un commento, senza le nuove righe e la formattazione del codice).
Stew

2

Se le tue dita sono predefinite CTRL-A CTRL-C, prova le mappature da $VIMRUNTIME/mswin.vim.

" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y

" CTRL-A is Select all
noremap <C-A> gggH<C-O>G
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
cnoremap <C-A> <C-C>gggH<C-O>G
onoremap <C-A> <C-C>gggH<C-O>G
snoremap <C-A> <C-C>gggH<C-O>G
xnoremap <C-A> <C-C>ggVG

Li ho mappati su <Leader><C-a>e <Leader><C-c>.


2

Copia l'intero file all'interno di vim o delle sue schede

y G 

quindi passare a una scheda e incollare

p

e per tagliare l'intero file utilizzare

d G

2

Ho aggiunto la seguente riga al mio .vimrc

nnoremap <F5> :%y+<CR>

Questo mi permette di copiare tutto il testo in Vim negli Appunti premendo F5(in modalità comando).


1

Ecco un comando mappa per selezionare tutto negli appunti usando CTRL+ a:

"
" select all with control-a
"
nnoremap <C-a> ggmqvG"+y'q

Aggiungilo al tuo .vimrc e sei a posto ...


1

So che dieci anni su questo dovrebbero essere risolti, ma le prime due risposte non hanno funzionato per me, quindi ho continuato a scavare. Su un Redhat (server remoto) - Windows 10 (macchina locale), se non riesci a selezionare tutto con un mouse, rimani bloccato perché le normali copie non funzionano tra il telecomando e gli appunti della macchina locale.

Quindi, per copiare su Linux remoto e incollare su Windows locale, specificare il buffer primario con * e fare un bel doppio tiro

Usa gg" * yy.


0

Ho creato una funzione per eseguire questa azione, posizionarla sul tuo ~/.vimrc.

fun! CopyBufferToClipboard()
    %y+
endfun
nnoremap <Leader>y :call CopyBufferToClipboard()<CR>
command! -nargs=0 CopyFile :call CopyBufferToClipboard()

OBS: Se stai usando Neovim hai anche bisogno di un gestore di appunti come xclip. per ulteriori informazioni digitare in neovim:h checkhealth

E 'anche importante ricordare che non sempre una semplice ycopierà negli appunti, in modo da rendere ogni avanzamento copia +wich è "Appunti Register" cerca di impostare: :set clipboard=unnamed,unnamedplus. Per ulteriori informazioni, consultare::h unnamed .

Qui maggiori informazioni su vim wikia.


0

Puoi usare una scorciatoia, come questa:

noremap <F6> :%y+<CR>

Significa che quando premi F6 in modalità Normald, copierà l'intero file e lo aggiungerà negli Appunti. Oppure puoi semplicemente digitare in modalità normale :%y+e poi premere Enter.


-1

Fai clic con il pulsante sinistro del mouse, trascina attraverso la sezione che desideri copiare e rilasciare. Il codice viene automaticamente copiato negli appunti.


3
Il file potrebbe essere enorme e trascinare l'intero testo con il mouse non è produttivo (né un vimodo).
Dr Beco,

1
In realtà questa è una buona risposta e funziona per me. Nel mio sistema, l'ambiente è v restrittivo. Devo catitare l'output sullo schermo, quindi utilizzare il mouse per trascinare, selezionare e rilasciare .. quindi copio su Windows Notepad ++ .. e funziona benissimo. Nient'altro funziona.
Apurva Singh,

-1

Non sono riuscito a copiare i file usando le risposte sopra ma ho del mastice e ho trovato una soluzione alternativa su Quora.

  1. Modifica le impostazioni della tua sessione PuTTY, vai alla registrazione e modificalo in "caratteri stampabili". Imposta il file di registro
  2. Fai un gatto del rispettivo file
  3. Vai al file impostato nel passaggio n. 1 e avrai i tuoi contenuti nel file di registro.

Nota: copia tutti i caratteri stampati di quella sessione nel file di registro, quindi alla fine diventerà grande. In tal caso, elimina il file di registro e inserisci il file di destinazione in modo da ottenere il contenuto di quel particolare file copiato sul tuo computer.

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.