Conosco solo un'istanza che utilizza i registri è tramite la CtrlR*quale incollare il testo dagli appunti.
Quali sono gli altri usi dei registri? Come usarli?
Tutto quello che sai sui registri VI (concentriamoci su vi 7.2) - condividi con noi.
Conosco solo un'istanza che utilizza i registri è tramite la CtrlR*quale incollare il testo dagli appunti.
Quali sono gli altri usi dei registri? Come usarli?
Tutto quello che sai sui registri VI (concentriamoci su vi 7.2) - condividi con noi.
Risposte:
I registri in Vim ti consentono di eseguire azioni o comandi sul testo memorizzato al loro interno. Per accedere a un registro, digitare "a
prima di un comando, dove si a
trova il nome di un registro. Se si desidera copiare la riga corrente nel registro k
, è possibile digitare
"kyy
Oppure puoi aggiungere a un registro usando una lettera maiuscola
"Kyy
È quindi possibile spostarsi nel documento e incollarlo altrove utilizzando
"kp
Per incollare dagli Appunti di sistema su Linux
"+p
Per incollare dagli Appunti di sistema su Windows (o dagli Appunti "evidenziazione del mouse" su Linux)
"*p
Per accedere a tutti i registri attualmente definiti digitare
:reg
"+
è un registro speciale che fa riferimento agli Appunti di sistema.
"*
; così diventa il comando da copiare fino alla fine del file "*yG
.
*
è presente negli Appunti "evidenziazione del mouse", ed +
è negli Appunti Ctrl-XCV.
+
)?
Mi ha fatto piacere quando ho scoperto il 0
registro. Se si strappa il testo senza assegnarlo a un determinato registro, verrà assegnato al 0
registro, oltre a essere salvato nel "
registro predefinito . La differenza tra i registri 0
e "
è che 0
è popolata solo con il testo strappato, mentre il registro predefinito è anche popolato con il testo cancellato usando i comandi d
/ D
/ x
/ X
/ c
/ C
/ s
/ S
.
Lo trovo utile quando voglio copiare del testo, eliminare qualcosa e sostituirlo con il testo copiato. I seguenti passaggi illustrano un esempio:
y[motion]
: questo testo viene salvato "
e 0
registratod[motion]
: questo testo viene salvato nel "
registro"0p
dov'è "
il comando per usare un registro per il comando successivo.
Nel passaggio finale, se dovessi incollare dal registro predefinito (con p
), utilizzerebbe il testo che hai appena eliminato (probabilmente non quello che volevi).
Si noti che p
o P
paste dal registro predefinito. L'equivalente longhand sarebbe ""p
(o ""P
) e "0
contiene l'ultimo yank, "1
contiene l'ultima cancellazione o modifica.
Per maggiori informazioni vedi :help registers
.
p
o P
paste dal registro predefinito. L'equivalente longhand sarebbe ""p
(o ""P
).
"
è il comando per utilizzare un registro per il comando successivo. Quindi ""p
userei il "
registro per il comando incolla e "0p
userei il 0
registro.
0p
significherebbe passare al primo carattere della riga corrente e incollare dal contenuto del registro predefinito ( "
). "p
sarebbe un comando incompleto poiché è necessario specificare per quale comando utilizzare il registro p
.
Una delle mie parti preferite sui registri è usarle come macro!
Supponiamo che tu abbia a che fare con un file di valori delimitato da tabulazione in quanto tale:
ID Df %Dev Lambda
1 0 0.000000 0.313682
2 1 0.023113 0.304332
3 1 0.044869 0.295261
4 1 0.065347 0.286460
5 1 0.084623 0.277922
6 1 0.102767 0.269638
7 1 0.119845 0.261601
Ora decidi che devi aggiungere un segno di percentuale alla fine del campo% Dev (a partire dalla seconda riga). Faremo una semplice macro nel m
registro (selezionato arbitrariamente) come segue:
Premere:: qm
per avviare la registrazione della macro nel m
registro.
EE
: Vai alla fine della terza colonna.
a
: Modalità di inserimento da aggiungere alla fine di questa colonna.
%
: Digita il segno di percentuale che vogliamo aggiungere.
<ESC>
: Torna in modalità comando.
j0
: Vai all'inizio della riga successiva.
q
: Interrompe la registrazione di macro
Ora possiamo semplicemente digitare @m
per eseguire questa macro sulla riga corrente. Inoltre, possiamo digitare @@
per ripetere o 100@m
per farlo 100 volte! La vita sembra abbastanza buona.
A questo punto dovresti dire: " MA ASPETTA, CHE COSA DOVREBBE FARE CON I REGISTRI ?"
Punto eccellente. Analizziamo cosa c'è nel contenuto del m
registro digitando "mp
. Otteniamo quindi quanto segue:
EEa%<ESC>j0
All'inizio sembra che tu abbia aperto accidentalmente un file binario nel blocco note, ma a un secondo sguardo, è l'esatta sequenza di caratteri nella nostra macro!
Sei una persona curiosa, quindi facciamo qualcosa di interessante e modifichiamo questa riga di testo per inserire un !
vecchio anziché noioso %
.
EEa!<ESC>j0
Quindi inseriamo questo nel n
registro digitando B"nyE
. Quindi, solo per i calci, eseguiamo la n
macro su una riga dei nostri dati usando @n
....
OMG, AGGIUNTO A !
Essenzialmente, eseguire una macro è come premere l'esatta sequenza di tasti nel registro di quella macro. Se questo non è un bel trucco del registro, mi mangerò il cappello.
+
invece di j0
andare al primo carattere non vuoto nella riga successiva.
Altri registri utili:
"*
oppure "+
- il contenuto degli Appunti di sistema
"/
- ultimo comando di ricerca
":
- ultimo comando.
Nota con le macro vim, puoi modificarle, poiché sono solo un elenco delle sequenze di tasti utilizzate durante la registrazione della macro. Quindi puoi scrivere in un file di testo la macro (usando "ap
per scrivere la macro a ) e modificarli e caricarli in un registro con "ay$
. Bel modo di memorizzare macro utili.
vim --version
- -clipboard
significa che non ce l'hai, +clipboard
significa che lo fai.
"*
e "+
sono ancora più interessanti: "+
incolla l'ultimo testo copiato con ctrl+c
(copia buffer), o qualsiasi altra scorciatoia usi (o right-click>copy
). "*
incolla l'ultimo testo evidenziato con il mouse (buffer di selezione). Quindi se copi qualcosa con ctrl+c
e poi evidenzi qualcos'altro con il mouse, puoi scegliere quale incollare. Questo non funziona in Windows, dove questi due registri sono sinonimi.
"*
e "+
per anni! Pensavo che solo gvim avesse accesso agli Appunti di sistema, ma a quanto pare anche Vim apparentemente regolare!
-xterm_clipboard
acceso vim --version
. Qualche pacchetto semplice da installare? (debian / apt-get). Grazie.
Il registro del buco nero _
è quello /dev/null
dei registri.
Lo uso nel mio vimrc per consentire l'eliminazione di singoli caratteri senza aggiornare il registro predefinito:
noremap x "_x
e per incollare in modalità visiva senza aggiornare il registro predefinito:
vnoremap p "_dP
x
diventa meno conveniente per trasporre caratteri.
x
mappatura non è più possibile eseguire il xp
"comando" per cambiare la corrente con il carattere successivo. Abbastanza utile per le correzioni di errori di battitura. Dobbiamo anche Xp
cambiare la corrente con il personaggio precedente.
Se vuoi incollare il contenuto del registro in un comando ex-mode, premi <C-r><registerletter>
.
Perché dovresti usare questo? Volevo fare una ricerca e sostituire una stringa longish, quindi l'ho selezionata in modalità visiva, ho iniziato a digitare l'espressione di ricerca / sostituzione :%s/[PASTE YANKED PHRASE]//g
e sono andata avanti la mia giornata.
Se vuoi solo incollare una sola parola in modalità ex, puoi assicurarti che il cursore sia su di essa prima di entrare in modalità ex, e quindi <C-r><C-w>
premere in modalità ex per incollare la parola.
:
riga di comando è la cosa migliore che ho imparato oggi
/[write out your regex]<cr>
e poi per sostituire just s/<C-R>//replacement/
. In questo modo ottieni il vantaggio di un feedback dal vivo sul tuo regex prima di eseguire la sostituzione.
Penso che il registro del guru segreto sia espressione = registro. Può essere utilizzato per i mapping creativi.
:inoremap \d The current date <c-r>=system("date")<cr>
Puoi usarlo insieme al tuo sistema come sopra o ottenere risposte da funzioni personalizzate VimL ecc.
o semplicemente cose ad hoc come
<c-r>=35+7<cr>
Un trucco interessante è usare "1p
per incollare l'ultima cancellazione / modifica (, e poi usare .
ripetutamente per incollare le successive cancellazioni. In altre parole, "1p...
è sostanzialmente equivalente a "1p"2p"3p"4p
.
Puoi usarlo per invertire una manciata di righe:
dddddddddd"1p....
Dalla pagina di aiuto di vim:
CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
Insert the contents of a numbered or named register. Between
typing CTRL-R and the second character '"' will be displayed
<...snip...>
Special registers:
'"' the unnamed register, containing the text of
the last delete or yank
'%' the current file name
'#' the alternate file name
'*' the clipboard contents (X11: primary selection)
'+' the clipboard contents
'/' the last search pattern
':' the last command-line
'-' the last small (less than a line) delete
'.' the last inserted text
*c_CTRL-R_=*
'=' the expression register: you are prompted to
enter an expression (see |expression|)
(doesn't work at the expression prompt; some
things such as changing the buffer or current
window are not allowed to avoid side effects)
When the result is a |List| the items are used
as lines. They can have line breaks inside
too.
When the result is a Float it's automatically
converted to a String.
See |registers| about registers. {not in Vi}
<...snip...>
nmap <F2> @q
uso il registro q, perché poi per salvare una macro per la riproduzione di F2, ho appena premuto qq
. salvataggio e riproduzione rapida delle macro.
Uso il registro predefinito per grep per il testo nella mia finestra di vim senza dover raggiungere il mouse.
:!grep "<CTRL-R>0"<CR>
Usa i registri nei comandi con @
. Per esempio:
echo @a
echo @0
echo @+
Mettili al comando:
let @a = 'abc'
Ora "ap
incollerà abc
.
Una grande fonte di confusione è il registro predefinito "
. È importante sapere come funziona. È molto meglio se il registro predefinito viene evitato la maggior parte delle volte. La spiegazione dalla documentazione di Vim:
Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g. "xdd). This is like the unnamed register is pointing
to the last used register.
Quindi il registro predefinito è in realtà un puntatore all'ultimo registro usato. Quando si elimina o si strappa qualcosa, questo registro punta ad altri registri. Puoi verificarlo controllando i registri. C'è sempre un altro registro che è esattamente uguale al registro predefinito: il registro yank ( "0
), il primo registro delete ( "1
), il piccolo registro register ( "-
) o qualsiasi altro registro che è stato usato per cancellare o yank.
L'unica eccezione è il registro del buco nero. Vim doc dice:
An exception is the '_' register: "_dd does not store the deleted text in any
register.
Di solito si sta molto meglio utilizzando direttamente: "0
, "-
e "1-"9
registri di default o nei registri di nome.
Un registro trascurato è il '.' dot dot che contiene l'ultimo testo inserito, non importa come sia stato inserito, ad es. ct] (cambia fino a]). Quindi ti rendi conto che è necessario inserirlo altrove ma non è possibile utilizzare il metodo di ripetizione punto.
:reg .
:%s/fred/<C-R>./
Il mio amico Brian ha scritto un articolo completo su questo. Penso che sia un'ottima introduzione su come usare gli argomenti. https://www.brianstorti.com/vim-registers/