it-swarm.it

Perché è una newline per Vim?

Dalla domanda Come sostituire un personaggio per una nuova riga in Vim?. Devi usare\r quando sostituisci il testo per una nuova riga, in questo modo

:%s/%/\r/g

Ma quando si sostituisce la fine di linee e nuove righe per un personaggio, è possibile farlo come:

:%s/\n/%/g 

Quale sezione del manuale documenta questi comportamenti e qual è il ragionamento alla base?

243
Vinko Vrsalovic

Da vim docs on pattern :

\r corrisponde a <CR>

\n corrisponde a un fine riga - Quando si esegue la corrispondenza in una stringa anziché nel testo buffer, viene trovato un carattere letterale di nuova riga.

154
pjz

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

Durante la ricerca

...

\n è newline, \r è CR (ritorno a capo = Ctrl-M = ^M)

Durante la sostituzione

...

\r è newline, \n è un byte null (0x00).

190

Un altro aspetto di questo è che \0, che è tradizionalmente NULL, viene preso in s//\0/ significa "l'intero modello abbinato". (Che, a proposito, è ridondante con e più lungo di, &).

  • Quindi non puoi usare \0 significa NULL, quindi usi \n
  • Quindi non puoi usare \n significa \n, quindi usi \r.
  • Quindi non puoi usare \r significa \r, ma non so chi vorrebbe aggiungere quel carattere apposta.

-☈

105
rking

:help NL-used-for-Nul

Scheda tecnica:

<Nul> i caratteri nel file sono memorizzati come <NL> in memoria. Sul display vengono visualizzati come "^@ ". La traduzione viene eseguita durante la lettura e la scrittura di file. Per abbinare un <Nul> con un modello di ricerca puoi semplicemente inserire CTRL - @ o " CTRL-V 000". Questo è probabilmente proprio quello che ti aspetti. Internamente il personaggio viene sostituito con un <NL> nel modello di ricerca. Ciò che è insolito è che digitando CTRL-VCTRL-J si inserisce anche un <NL>, quindi cerca anche un <Nul> nel file. {Vi non può gestire <Nul> caratteri nel file}


47

Prima di tutto, apri :h :s per vedere la sezione "4.2 Sostituzione" 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} vedi |pattern| .
{string} può essere una stringa letterale o qualcosa del genere
speciale; vedi |sub-replace-special| .

Quindi ora sai che il modello di ricerca e i modelli di sostituzione seguono regole diverse. Se segui il link a |pattern|, ti porta alla sezione che spiega tutti gli schemi regexp usati in Vim.

Nel frattempo, |sub-replace-special| ti porta alla sottosezione di "4.2 Sostituzione", che contiene i modelli per la sostituzione, tra cui \r per interruzione/divisione.

(Il collegamento a questa parte del manuale è :h :s% )

10
syockit