Risposte:
Sì. Hit Ctrl- Rallora ". Se hai caratteri di controllo letterali in ciò che hai strappato, usa Ctrl- R, Ctrl- O," .
Ecco una spiegazione di cosa puoi fare con i registri. Quello che puoi fare con i registri è straordinario, e una volta che sai come usarli non puoi vivere senza di loro.
I registri sono sostanzialmente posizioni di archiviazione per le stringhe. Vim ha molti registri che funzionano in diversi modi:
0
(registro yank: quando lo usi y
in modalità normale, senza specificare un registro, il testo strappato va lì e anche al registro predefinito),1
a 9
(spostamento dei registri di eliminazione, quando si utilizzano comandi come c
o d
, ciò che è stato cancellato va nel registro 1, ciò che era nel registro 1 va nel registro 2, ecc. ),"
(registro predefinito, noto anche come registro senza nome. Qui è dove "entra Ctrl- R," ),a
per z
per uso personale (capitalizzati A
per Z
sono per l'aggiunta ai registri corrispondenti)._
(si comporta come /dev/null
(Unix) o NUL
(Windows), puoi scriverci ma è scartato e quando leggi da esso, è sempre vuoto),-
(piccolo registro di cancellazione),/
(Ricerca di registrazione del modello, aggiornato quando si guarda per il testo con /
, ?
, *
o #
per esempio, è possibile anche scrivere ad esso per cambiare dinamicamente il modello di ricerca),:
(memorizza l'ultimo comando digitato VimL tramite Q
o :
, di sola lettura),+
e *
(registri degli Appunti di sistema, è possibile scrivere su di essi per impostare gli Appunti e leggere da essi il contenuto degli Appunti)Vedere :help registers
per il riferimento completo.
È possibile, in qualsiasi momento, utilizzare :registers
per visualizzare i contenuti di tutti i registri. Sinonimi e shorthands per questo comando sono :display
, :reg
e:di
.
In Inserisci o modalità riga di comando, Ctrl- Roltre a un nome del registro, inserisce il contenuto di questo registro. Se si desidera inserirli letteralmente (nessun rientro automatico, nessuna conversione di caratteri di controllo come 0x08
backspace, ecc.), È possibile utilizzare Ctrl- R, Ctrl- O, nome registro. Vedere:help i_CTRL-R
e paragrafi seguenti per ulteriori riferimenti.
Ma puoi anche fare quanto segue (e probabilmente ho dimenticato molti usi per i registri).
In modalità normale, premi ":p. L'ultimo comando che hai usato in vim viene incollato nel tuo buffer.
Decomponiamo: "
è un comando in modalità Normale che consente di selezionare quale registro utilizzare durante la successiva operazione di strappo, cancellazione o incolla. ":Seleziona quindi il registro dei due punti (memorizzando l'ultimo comando). Quindi pè un comando che già conosci, incolla il contenuto del registro.
cf. :help "
,:help quote_:
Si sta modificando un file VimL (per esempio il vostro .vimrc
) e vuoi eseguire un paio di righe consecutive in questo momento: yj:@"Enter.
Qui, yjsposta la riga corrente e successiva (questo perché j è un movimento lineare ma questo non rientra nell'ambito di questa risposta) nel registro predefinito (noto anche come registro senza nome). Quindi il :@
comando Ex riproduce i comandi Ex memorizzati nel registro indicato come argomento e"
è il modo in cui si fa riferimento al registro senza nome. Vedi anche la parte superiore di questa risposta, che è correlata.
Non confondere "
usato qui (che è un nome di registro) con l' "
esempio precedente, che era un comando in modalità normale.
cf. :help :@
e:help quote_quote
Inserire l'ultimo modello di ricerca nel proprio file in modalità di inserimento, o nella linea di comando, con Ctrl- R, /.
cf. :help quote_/
,help i_CTRL-R
Corollario: Mantenete il vostro modello di ricerca, ma aggiungere un'alternativa: /
Ctrl- R, / \|alternative
.
Hai selezionato due parole nel mezzo di una riga in modalità visiva, le hai strappate con y
, sono nel registro senza nome. Ora si vuole aprire una nuova linea appena al di sotto dove ti trovi, con quelle due parole: :pu
. Questa è una scorciatoia per :put "
. Il :put
comando, come molti comandi Ex, funziona solo in modo lineare.
cf. :help :put
Avresti potuto anche fare: :call setreg('"', @", 'V')
allora p
. La setreg
funzione imposta il registro di cui viene dato il nome come primo argomento (come una stringa), lo inizializza con il contenuto del secondo argomento (e puoi usare i registri come variabili con il nome @x
dove x
è il nome del registro in VimL), e lo trasforma nella modalità specificata nel terzo argomento, V
per linewise, niente per characterwise e letteralmente ^V
per blockwise.
cf. :help setreg()
. Le funzioni inverse sono getreg()
e getregtype()
.
Se hai registrato una macro con qa
... q
, :echo @a
ti dirà cosa hai digitato e @a
riprodurrà la macro (probabilmente lo sapevi, molto utile per evitare attività ripetitive)
cf. :help q
,help @
Corollario dell'esempio precedente: se è presente 8go
negli Appunti, @+
verrà riprodotto il contenuto degli Appunti come macro e quindi passerà all'ottavo byte del file. In realtà questo funzionerà con quasi tutti i registri. Se l'ultima stringa inserita era dd
in modalità Inserisci, allora @.
(poiché il .
registro contiene l'ultima stringa inserita) eliminerà una riga. (Documentazione Vim è sbagliato in questo senso, in quanto afferma che i registri #
, %
, :
e .
sarà solo il lavoro con p
, P
, :put
e Ctrl- R).
cf. :help @
Non confondere :@
(comando che riproduce i comandi Vim da un registro) e @
(comando in modalità normale che riproduce i comandi in modalità normale da un registro).
Notevole eccezione è @:
. Il registro dei comandi non contiene i due punti iniziali né contiene il ritorno a capo finale. Tuttavia, in modalità Normale, @:
farà ciò che ti aspetti, interpretando il registro come un comando Ex, non tentando di riprodurlo in modalità Normale. Quindi, se il tuo ultimo comando è stato :e
, il registro contiene e
ma @:
ricaricherà il file, non andrà alla fine della parola.
cf. :help @:
Mostrare ciò che si farà in modo normale prima di eseguirlo: @='dd'
Enter. Non appena si =
preme il tasto, Vim passa alla valutazione dell'espressione: quando si immette un'espressione e si Enterpreme, Vim la calcola e il risultato funge da contenuto del registro. Naturalmente il registro =
è di sola lettura e one-shot. Ogni volta che inizi a usarlo, dovrai inserire una nuova espressione.
cf. :help quote_=
Corollario: se stai modificando un comando e ti rendi conto che dovresti inserire nella riga di comando una riga dal tuo buffer corrente: non premere Esc! Usa Ctrl- R =getline(58)
Enter. Dopodiché tornerai alla modifica della riga di comando, ma ha inserito i contenuti della 58a riga.
Definire manualmente un modello di ricerca: :let @/ = 'foo'
cf. :help :let
Nota che così facendo, non devi scappare /
nel modello. Tuttavia, è necessario raddoppiare tutte le virgolette singole, ovviamente.
Copiare tutte le righe che iniziano con foo
, e successivamente linee contenenti bar
da appunti, catena questi comandi: qaq
(azzera l' un registro memorizzare una macro vuoto al suo interno),:g/^foo/y A
, :g/bar/y A
, :let @+ = @a
.
L'uso del nome di un registro di capitale fa funzionare il registro in modalità append
Meglio, se Q
non è stato rimappato da mswin.vim
, avviare la modalità Ex conQ
, concatenare quei "comandi di due punti" che in realtà sono meglio chiamati "comandi Ex" e tornare alla modalità normale digitando visual
.
cf. :help :g
, :help :y
,:help Q
Fare doppio spazio il file: :g/^/put _
. Questo mette il contenuto del registro del buco nero (vuoto durante la lettura, ma scrivibile, comportandosi come /dev/null
) in senso lineare, dopo ogni riga (perché ogni riga ha un inizio!).
Aggiungere una riga che contiene foo
prima di ogni riga: :g/^/-put ='foo'
. Questo è un uso intelligente del registro delle espressioni. Qui, -
è sinonimo di .-1
(cfr :help :range
.). Dal momento che :put
inserisce il testo dopo la riga, devi dirlo esplicitamente di agire sul precedente.
Copiare l'intero buffer negli appunti di sistema: :%y+
.
cf. :help :range
(per la %
parte) e :help :y
.
Se avete misrecorded una macro, è possibile digitare :let @a='
Ctrl- R =replace(@a,"'","''",'g')
Enter '
e modificarlo. Ciò modificherà il contenuto della macro memorizzata nel registro a
e qui viene mostrato come è possibile utilizzare il registro delle espressioni per farlo.
Se lo facessi dddd
, potresti farlo uu
per annullare. Con p
te potresti ottenere l'ultima riga eliminata. Ma in realtà si può anche recuperare fino a 9 elimina con i registri @1
attraverso@9
.
Ancora meglio, se lo fai "1P
, allora.
in modalità Normale verrà riprodotto "2P
e così via.
cf. :help .
e:help quote_number
Se si desidera inserire la data corrente in modalità Inserisci: Ctrl-R=strftime('%y%m%d')
Enter .
cf. :help strftime()
Ancora una volta, cosa può essere fonte di confusione:
:@
è un comando da riga di comando che interpreta il contenuto di un registro come vimscript e lo genera@
nel comando in modalità normale che interpreta il contenuto di un registro come sequenze di tasti in modalità normale (tranne quando si utilizza :
register, che contiene l'ultimo comando riprodotto senza i due punti iniziali: in questo caso riproduce il comando come se si riscrivessero anche i due punti e la chiave di ritorno finale).
"
nel comando in modalità normale che ti aiuta a selezionare un registro per yank, incolla, cancella, correggi, ecc.
"
è anche un nome di registro valido (il registro predefinito o senza nome) e pertanto può essere passato come argomento per i comandi che prevedono nomi di registroPer incollare qualcosa che è negli Appunti di sistema puoi semplicemente usare SHIFT- INS.
Funziona in Windows, ma suppongo che funzioni bene anche in Linux.
:!rm -rf /<cr>
, lo eseguirà. Usa invece i registri!
shift-ins
sia più facile di ctrl-R+*
? Questo è ovviamente se sei in gvim. Se sei nel terminale collegato a un'altra macchina e vuoi incollare qualcosa dagli appunti, sai qualcosa di meglio di shift-ins
? perché i registri non funzionano in quella situazione. Pensa prima di commentare e fare altre cose (come il downvoting).
"Vorrei incollare il testo strappato nella riga di comando di Vim."
Mentre la risposta più votata è molto completa, preferisco modificare la cronologia dei comandi.
In modalità normale, digitare: q:
. Questo ti darà un elenco di comandi recenti, modificabili e ricercabili con normali comandi vim. Inizierai su una riga di comando vuota in fondo.
Per la cosa esatta che l'articolo richiede, incollando una linea strappata (o strappata qualsiasi cosa) in una riga di comando, tira il tuo testo e poi: q:p
(entra nella modalità di modifica della cronologia dei comandi, quindi (p) usa il tuo testo strappato in un nuovo comando linea. Modifica a piacere, enterper eseguire.
Per uscire dalla modalità cronologia dei comandi, è l'opposto. Nella modalità normale nella cronologia dei comandi, digitare: :q
+enter
Per incollare qualcosa dagli Appunti di sistema nella riga di comando di Vim ("modalità comando"), usa Ctrl+ Rseguito da +. Per me, almeno su Ubuntu, Shift+ Insnon funziona.
PS: Non sono sicuro del motivo per cui Ctrl+ Rseguito da *, che teoricamente è lo stesso di Ctrl+ Rseguito da +non sembra funzionare sempre. Ho cercato e scoperto la +versione e sembra funzionare sempre, almeno sulla mia scatola.
Stavo avendo un problema simile. Volevo che il testo selezionato finisse in un comando, ma non fare affidamento su incollarlo. Ecco il comando per cui stavo cercando di scrivere una mappatura per:
:call VimuxRunCommand("python")
I documenti per questo plugin mostrano solo l'uso dei valori letterali delle stringhe. Quanto segue verrà interrotto se si tenta di selezionare testo che contiene virgolette doppie:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Per aggirare questo, fai semplicemente riferimento al contenuto della macro usando @
:
vnoremap y:call VimuxRunCommand(@")<cr>
Passa il contenuto del registro senza nome e funziona con la mia doppia citazione e le edgecase multilinea.
@
personaggio al comando vimux. pensa @
a sfuggire alla seguente doppia citazione e viene trattato come un registro anziché come un carattere normale. L' vnoremap
ho definito è attivo in modalità visiva, quindi strappa il testo selezionato e quindi lo incolla nel comando vimux, inviandolo a un interprete in esecuzione in un riquadro adiacente. davvero ottimo per lavorare su una sceneggiatura e testarne piccole parti con un paio di battiture.
OS X
Se stai usando Vim in Mac OS X, sfortunatamente viene fornito con una versione precedente e non conforme alle opzioni degli Appunti. Fortunatamente, Homebrew può facilmente risolvere questo problema.
Installa Vim:
brew install vim --with-lua --with-override-system-vi
Installa la versione GUI di Vim:
brew install macvim --with-lua --with-override-system-vi
Riavvia il terminale affinché abbia effetto.
Aggiungi la seguente riga a ~/.vimrc
set clipboard=unnamed
Ora puoi copiare la linea in Vim con yy
e incollarla a livello di sistema.
Per il contesto, queste informazioni provengono da out-of-the-box, nessun plug-in, nessun comportamento .vimrc Vim 7.4 in Linux Mint con le opzioni predefinite.
Puoi sempre selezionare il testo con il mouse (o usando Vo ve posizionando la selezione nel "" registro) e incollarlo nella riga di comando con Shift+ Ctrl+v .
Digitando Ctrl+ rnella riga di comando verrà richiesto un nome registro. quindi digitando :CTRL-r*inserirai il registro dei contenuti * nella riga di comando. Incollerà qualsiasi registro, non solo "*. Vedi :help c_CTRL-R
.
Inoltre, il pulsante centrale del mouse verrà incollato nella riga di comando.
Vedere :help->quote-plus
una descrizione di come X Window gestisce la selezione. Anche in un Vim semplice e immediato (di nuovo, in Vim 7.4 in Linux Mint, comunque), qualsiasi selezione effettuata con il pulsante sinistro del mouse può essere incollata nella riga di comando con il pulsante centrale del mouse.
Inoltre, il pulsante centrale del mouse incollerà anche il testo selezionato in Vim in molte altre applicazioni X Window, anche quelle della GUI (ad esempio, Firefox e Thunderbird ) e incollando il testo nella riga di comando è possibile anche dove il testo è stato selezionato da altre app .
Vedi: help-> x11-selection per informazioni addl.
tl; dr
Prova prima l'approccio: CTRL-r, quindi usa Shift+ Ctrl+ vo il pulsante centrale del mouse se hai bisogno di qualcos'altro.
È ammesso che può essere fonte di confusione.
"[a-z]y
: Copia il testo nel registro [az]
Utilizzare :!
per andare al comando di modifica
Ctrl+ R: Segui l'identità del registro per incollare ciò che copi.
Era usato per CentOS 7.
Se hai due valori inseriti in due diversi registri (ad esempio register a
e register b
), puoi semplicemente impostare una variabile c
ed eseguire l'operazione su di essa.
Ad esempio, :set c = str2float(@a) + str2float(@b)
quindi puoi incollare il contenuto di c
qualsiasi luogo.
Ad esempio mentre si è in modalità INSERT, CTRL + R
quindi digitare =
per accedere al registro delle espressioni e digitare semplicemente c
dopo il segno di uguale e premere INVIO. Fatto, ora dovresti avere il totale a
e i b
registri.
Tutti questi possono essere registrati in una macro e ripetuti!
La str2float
funzione viene utilizzata se si lavora con float, in caso contrario si otterranno numeri interi.
Non sono sicuro che sia idiomatico, ma ha funzionato nel mio caso in cui dovevo aggiungere 2 numeri di fila e ripeterlo per altre 500 righe.