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?

È stato utile?

Soluzione

Da documenti vim sui modelli:

\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 significare NULL, 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%)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top