Domanda
Dalla domanda Come sostituire un carattere per una nuova riga in Vim?.Devi usare quando sostituisci il testo per una nuova riga, come questa
:%s/%/\r/g
Ma quando sostituisci la fine delle righe e i ritorni a capo di un personaggio, puoi farlo in questo modo:
:%s/\n/%/g
Quale sezione del manuale documenta questi comportamenti e qual è il ragionamento dietro di essi?
Soluzione
\r
corrisponde a <CR>
\n
corrisponde a una fine della linea: quando si abbinano in una stringa anziché in un testo buffer, viene abbinato un personaggio letterale della nuova linea.
Altri suggerimenti
Da http://vim.wikia.com/wiki/Search_and_replace :
Durante la ricerca
...
\n
è una nuova riga,\r
ÈCR
(ritorno a capo =Ctrl-M
=^M
)Durante la sostituzione
...
\r
è una nuova riga,\n
è un byte nullo (0x00
).
Un altro aspetto di questo è quello \0
, che tradizionalmente è NULL, viene preso in consideraziones//\0/
significare "l'intero modello abbinato".(Che, tra l'altro, è ridondante e più lungo di, &
).
- Quindi non puoi usare
\0
significareNULL
, quindi usi\n
- Quindi non puoi usare
\n
significare\n
, quindi usi\r
. - Quindi non puoi usare
\r
significare\r
, ma non so chi vorrebbe aggiungere quel carattere di proposito.
—☈
:help NL-used-for-Nul
Dettagli tecnici:
<Nul>
i caratteri nel file vengono memorizzati come<NL>
in memoria.Nel display sono mostrati come "^@
".La traduzione viene eseguita durante la lettura e la scrittura di file.Per abbinare a<Nul>
con un modello di ricerca puoi semplicemente inserirlo CTRL-@ O "CTRL+V 000".Questo è probabilmente proprio quello che ti aspetti.Internamente il personaggio viene sostituito con a<NL>
nel modello di ricerca.Ciò che è insolito è quella digitazione CTRL+V CTRL-J inserisce anche a<NL>
, quindi cerca anche a<Nul>
nel fascicolo.{Vi non può gestire<Nul>
caratteri nel file}
Innanzitutto aperto :h :s
vedere la sezione “4.2 Sostituto” della documentazione su “Modifica”.Ecco cosa accetta il comando:
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
Notare la descrizione di pattern
E string
Per il
{pattern}
Vedere|pattern|
.
{string}
può essere una stringa letterale o qualcosa del genere
speciale;Vedere|sub-replace-special|
.
Quindi ora sai che il modello di ricerca e i modelli di sostituzione seguono regole diverse.Se segui il collegamento a |pattern|
, ti porta alla sezione che spiega tutti i pattern regexp usati in Vim.
Nel frattempo, |sub-replace-special|
ti porta alla sottosezione di "4.2 Sostituto", che contiene i modelli per la sostituzione, tra cui is \r
per interruzione/divisione di riga.
(La scorciatoia per questa parte del manuale è :h :s%
)