Esiste un modo per copiare un blocco di testo negli appunti di sistema, in modo da poterlo incollare in un altro programma?

Commenti

  • Questo è già stato chiesto e risposto su SO. Potresti trovare ulteriori e diverse informazioni lì.
  • Sto usando questo plugin su macvim christoomey / vim-system-copy e lo adoro davvero. Funziona molto bene con i movimenti cpip, cpi{.
  • Ciò di cui hai veramente bisogno è EasyClip . Farà proprio questo e molto altro ancora …
  • Non posso aggiungere una risposta ma un commento. Se vuoi solo copiare un testo puoi anche utilizzare sed :). sed -n 5p file; solo 5a riga. sed -n -e 5p -e 8p file; solo 5a e 6a linea. sed -n 5,8p file; linee tra il 5 ° e l8 °. Stamperà le righe nella console. Puoi copiare facilmente selezionando il testo.

Risposta

Per X11 sistemi basati su (ad esempio Linux e molti altri UNIX -like) ci sono due appunti indipendenti luno dallaltro:

  • PRIMARIO – Questo è copy-on-select e può essere incollato con il pulsante centrale del mouse.
  • APPUNTI – Questo viene copiato (di solito) con ^C e incollato con ^V (è come MS Windows).

OS X e Windows hanno solo un appunti.

Per 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 regis speciali ters corrispondenti a questi appunti:

  • * usa PRIMARY; mnemonico: S tar è S elezione (per copy-on- s elezione)
  • + utilizza APPUNTI; mnemonico: CTRL PLUS C (per la combinazione di tasti comune)

Su Windows & OS X non cè differenza tra + e *, poiché questi sistemi hanno solo un singolo appunti, ed entrambi i registri si riferiscono alla stessa cosa (non importa quale usi).

Puoi usare questi registri come qualsiasi registro. Ad esempio, usando gli appunti PRIMARI * 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 desideri ” automaticamente ” interfaccia con il sistema “s appunti invece di fare sempre riferimento ad esso manualmente, puoi impostare la variabile clipboard:

  • Impostalo su unnamed per utilizzare * (PRIMARIO, su selezione)
  • Impostalo su unnamedplus per utilizzare + (APPUNTI, ^C)

Ora, usando solo yy andrà negli appunti di sistema, invece del registro senza nome di Vim, e p incollerà il sistema “s appunti.

Puoi anche assegnare a questi registri proprio come qualsiasi registro con let:

  • :let @+=42
  • :let @*=42

Il clipboard limpostazione ha alcune opzioni in più (come escludere filtri); ma queste sono le basi. Vedi :help "clipboard" per la storia completa 😉

gVim

Se usi gVim, puoi ottenere un comportamento copy-on-select quando utilizzando :set guioptions+=a.
Questa opzione è abilitata per impostazione predefinita sui sistemi X11 (copie su PRIMARY), ma non su MS Windows & OSX (poiché la selezione di qualsiasi testo sovrascriverebbe i tuoi appunti).

No +clipboard?

Vim richiede +clipboard flag della funzione affinché tutto ciò funzioni; puoi controllare se il tuo Vim ha questo utilizzando :echo has("clipboard") da Vim (se loutput è 0, “s no presente, se “s 1, lo è) o controllando loutput di vim --version per +clipboard.

La maggior parte delle distribuzioni Linux viene fornita con un ” minimo ” build Vim di default, che non ha +clipboard, ma di solito puoi installarlo:

  • Debian & Ubuntu: Installa vim-gtk3.
  • Fedora: installa vim-X11 ed esegui vimx invece di vim ( ulteriori informazioni ).
  • Arch Linux: installa gvim (questo abiliterà +clipboard anche per vim).

Potresti anche utilizza xclip, xcopy o xsel per copiare il testo negli appunti; vedi quanto segue domande per le soluzioni:

SSH

Puoi anche usare gli appunti su macchine remote se abiliti linoltro X11 su SSH. Ciò è particolarmente utile con il suggerimento di cui sopra poiché puoi utilizzare xclip per accedere agli appunti del tuo desktop. Il Vim sulla macchina su cui stai “re sshing” avrà ancora bisogno del +clipboard funzione.

Ciò richiede limpostazione ForwardX11Trusted e dovrebbe può essere eseguito solo con server affidabili , poiché ciò fornisce al server il controllo quasi completo sulla sessione X11:

$ ssh -XY myhost 

Per rendere persistenti queste impostazioni (quindi non è necessario aggiungere -XY ogni volta), potresti fare qualcosa di simile 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

Neovim ha rinnovato il supporto degli appunti. Linterfaccia integrata è stata rimossa e sostituita con un sistema che chiama unutilità esterna come xclip, xsel o pbcopy / pbpaste.

Dovrebbe autom prendere aticamente queste utilità e usarle. Su OS X pbcopy e pbpaste dovrebbero essere disponibili per impostazione predefinita, su Linux probabilmente vorrai installare xclip, poiché “è la più ampiamente disponibile (in realtà ci sono due versioni di xsel con flag incompatibili . è davvero stupido).

Vedi anche :help clipboard in Neovim.

Commenti

  • ssh -Y implica -X quindi -X può essere omesso.
  • Un effetto collaterale molto interessante dellapprendimento di questo (alcuni anni fa) per me è stata la consapevolezza che " può selezionare molti registri con nome. "+ non è magico, è ‘ è sufficiente registrare +. Quindi, ad esempio, se desideri copiare tre elementi contemporaneamente e incollarli uno per uno, puoi "1y, "2y e "3y e l ater "1p, "2p e "3p. Questo è davvero potente e inesistente in quasi tutti gli altri editor. Un altro utilizzo interessante è guardare le macro archiviate. Ad esempio, se registri con qq, ma ti rendi conto di dover risolvere il problema, puoi: in una riga temporanea "qp, correggere it e "qd.
  • Solo una nota: OS X ha due appunti separati. Uno è accessibile usando Cmd-C e Cmd-V e laltro usando le scorciatoie da tastiera di emacs Ctrl-K e Ctrl-Y.
  • @shahbaz – probabilmente è meglio usare i registri delle lettere per tale scopo, poiché quelli numerati vengono modificati ogni volta che viene eliminato del testo.
  • Copia & incolla come descritto nella domanda è inteso per desktop. È vero che linstallazione del pacchetto gvim insieme a vim fornisce funzionalità per gli appunti. ma nei browser di file ti vengono quindi offerti due editor di testo per aprire i file! E questo sembra brutto. Questo è il motivo per cui è meglio installare solo i pacchetti vim e vim-gui-common. Successivamente si forniscono le funzionalità degli appunti senza la necessità di installare gvim. Questo è su Linux Debian 10.

Risposta

Da http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus 

Questo cambia il registro Vim predefinito in + register, 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") 

Commenti

  • Perché questo non funziona per me quando yank & incolla tra istanze di vim (ciascuna in un terminale di terminazione separato)?
  • Se sei su Linux e Vim è stato compilato con la funzione + X11 e hai impostato clipboard = unnamedplus, dovresti essere in grado di strappare una riga in unistanza di vim e incollarla in unaltra istanza di vim. Dovresti anche essere in grado di incollarlo in qualsiasi altra applicazione con CTRL + V o MAIUSC + INSERT. Puoi utilizzare :version in Vim per vedere se + X11 appare nellelenco delle funzionalità incluse. Puoi anche verificare se la funzione ‘ unnamedplus ‘ è disponibile con :if has('unnamedplus')⏎ echo 'yes'⏎ endif se lo sei non su Linux, dovresti usare senza nome invece di senza nomeplus.

Risposta

Le altre risposte spiegano come copiare testo dal buffer negli appunti di sistema. Unaltra operazione comune è copiare il testo da un altro registro negli appunti. Ad esempio, se hai già inserito del testo in " (il registro predefinito), potresti voler caricare quel registro negli appunti.

Puoi fallo con :let:

  • let @+=@" — copia il registro predefinito negli appunti
  • let @*=@" — copia il registro predefinito nella selezione primaria di X11 (“mouse appunti “)
  • let @+=@a — copia dal registro a a gli appunti
  • ecc.

Nota che questo funziona per i registri in generale: let @a=@b copia il registro b per registrare a.

Rispondi

Attivo build che lo supportano, il registro denominato * è gli appunti di sistema. Per copiare il testo da Vim negli appunti di sistema, puoi selezionare il testo utilizzando la modalità visuale, quindi premere "* y per copiarlo negli appunti di sistema.

Al contrario, usa "* p per incollare il testo dagli appunti di sistema in Vim.

Risposta

Se non riesci a “capire come far funzionare +clipboard, cosa che non ho potuto” t “per qualche motivo, puoi fare questo.

Supponendo che tu voglia copiare solo una sezione del file, faccio shift + v per andare in modalità visuale ed evidenzia solo le linee che voglio copiare. Poi lo faccio.

# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard 

Spiegazione

  • "<,"> – significa che ha utilizzato la modalità visiva per selezionare un intervallo (non lo si digita)
  • w !{cmd} – scrivi lintervallo nello stdin di cmd, ulteriori informazioni su :help w_c
  • wl-copy e xclip sono programmi a cui puoi reindirizzare il testo e loro lo aggiungeranno agli appunti di sistema

Inoltre, una volta che questoènella tua cronologia, non devi digitare tutto Basta selezionare con la modalità visuale, digitare w quindi premere verso lalto e il comando dovrebbe completarsi automaticamente. Inoltre, non è necessario utilizzare la modalità visuale. Puoi impostare qualsiasi intervallo tu voglia.

Commenti

  • Upvoting questo (rispetto allaltra risposta simile) perché questa fornisce una spiegazione. A proposito, una nota per me o per altri lettori: quando usi xclip, NON devi aggiungere quel parametro -selection clipboard, che è troppo moooolto per scrivere. Limpostazione predefinita :'<,'>w !xclip copia il contenuto nella ” primaria “, ad esempio copy-on- seleziona gli appunti, che possono essere incollati con il pulsante centrale del mouse.

Risposta

Ti consiglio di usare Gvim, e aggiungilo al tuo .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Ciò abilita il supporto per Ctrl C , Ctrl X , Ctrl V come il blocco note in Windows.

Tieni presente che in questo modo verranno aggiunte anche altre scorciatoie comuni di Windows, come Ctrl S per :w, Ctrl A per seleziona tutto, ecc.

Risposta

Stavo lottando con gli appunti di sistema e vim allinterno di tmux.

È stato risolto utilizzando xsel o xclip, come in questo esempio:

1.) visu seleziona un blocco di testo in modalità normale: V<motionkey>

2.a) con xsel esegui ex: :"<,">w !xsel -b

2.b) con xclip esegui ex: :"<,">w !xclip -selection clipboard

3.) incolla in un altro programma

… e ora nmap come preferito.

Queste opzioni (-b o -selection clipboard) in pratica significano che il programma (xsel o xclip) viene inviato in background e aspetta che un altro programma incolla il contenuto, in modo che possa “interferire”.

(su manjaro con i3, xfce4-terminal, tmux)

Answer

Questo è il comportamento Volevo quando si trattava degli appunti di sistema:

  • Fare lo strappo di una riga con i lavori di ritorno a capo
  • Fare lo strappo di una linea senza il ritorno a capo funziona
  • Fare lo strappo a tutto ciò che è visivamente lavori selezionati
  • Taglia lavori
  • Tagliare una linea con lavori di ritorno a capo
  • Tagliare una linea senza lavori di ritorno a capo

Per lavori Voglio dire: sono ancora in grado di usare p per incollare mentre sono in vim e posso usare anche gli appunti di sistema. Fondamentalmente voglio che copia e incolla funzioni come previsto e non lho fatto ” Non voglio ingombrare i miei appunti di sistema più del necessario.

La mia tecnica era quella di mappare i comuni comandi di strappo, taglio ed eliminazione per utilizzare gli appunti di sistema aggiungendo queste righe al mio ~/.vimrc:

" use system clipboard " https://anuragpeshne.github.io/essays/vim/7.html noremap y "*y noremap yy "*yy noremap Y "*y$ noremap x "*x noremap dd "*dd noremap D "*D 

Le informazioni chiave da https://anuragpeshne.github.io/essays/vim/7.html il post del blog è:

La mappatura ricorsiva è dannosa, usa sempre la mappatura non ricorsiva. (noremap)

Commenti

  • Cosa significa " fare? La prima risposta ha già spiegato a cosa serve * (facendo riferimento agli appunti principali), ma ‘ non vedo alcuna spiegazione per a cosa serve " e perché fa funzionare il comando.
  • ‘ non è immediatamente ovvio perché tu ‘ è probabilmente abituato alla citazione usata per aggirare le parole, come "foo"; tuttavia, per vim "* è in realtà il nome del ” register ” (un vim concept) che si collega agli appunti di sistema. Se apri vim e digiti :registers puoi vedere i nomi di altri registri come: "", "0, "1 e così via. Ho trovato questo articolo utile per conoscere i registri: brianstorti.com/vim-registers

Risposta

Se il tuo vim non supporta +clipboard puoi utilizzare fakeclip plugin per Linux, Mac, Windows, tmux, screen, …

Answer

Ogni altra risposta ha coperto tutte le cose importanti sui registri. Vorrei aggiungere unaltra cosa che uso.

Cè un modo in Vim per copiare direttamente il selezionato visivamente testo negli appunti. Mettilo semplicemente nel tuo file vimrc :

set guioptions+=a 

E, con questo ogni volta che selezioni visivamente del testo, verrà copiato nel tuo appunti. Per ulteriori informazioni su questo, :help guioptions

BTW, questo è solo per gVim.

Commenti

  • guioptions+=a è menzionato anche nella risposta di Carpetsmoker ‘.
  • @muru Sì, scusa . ‘ non lavevo mai visto prima. Lho appena visto.

Answer

Puoi anche utilizzare un comando globale per inserire un pattern specifico sul appunti. Può essere utile in situazioni in cui si hanno informazioni sparse in un file e la copiatura manuale è soggetta a errori e stancante.

Per prima cosa pulire il registro che riceverà le informazioni

:let @a="" 

Quindi copia tutte le righe che contengono il modello

:g/pattern/yank A 

Infine trasferendo (copiando) le informazioni negli appunti di sistema

:let @+=@a 

se provi a copiare ogni riga contenente un “modello” direttamente negli appunti non funzionerà perché gli appunti non hanno la capacità di aggiungere nuovi contenuto, quindi stiamo usando qui un normale registro vim per memorizzare tutte le righe contenenti il pattern in una volta e poi metterlo negli appunti.

OBS: è necessario pulire il registro prima di usarlo, e il luso della versione MAIUSCOLA del registro ci permette di aggiungere contenuto, altrimenti non funzionerà.

Risposta

MacVim Cmd + x/c/v per taglia / copia / incolla

Se utilizzi MacVim, i soliti Cmd+x/c/v sono definiti in $ VIMRUNTIME / macmap.vim che viene fornito per impostazione predefinita e quindi sono disponibili senza configurazione:

vnoremap <special> <D-x> "+x vnoremap <special> <D-c> "+y cnoremap <special> <D-c> <C-Y> nnoremap <special> <D-v> "+gP cnoremap <special> <D-v> <C-R>+ execute "vnoremap <script> <special> <D-v>" paste#paste_cmd["v"] execute "inoremap <script> <special> <D-v>" paste#paste_cmd["i"] 

Tuttavia, il loro utilizzo può portare a utenti vim che non conoscono il vim way e si perdono su un computer / ambiente esterno.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *