249 votes

Pourquoi est-ce que \r une nouvelle ligne pour Vim ?

De la question Comment remplacer un caractère par une nouvelle ligne dans Vim ? . Vous devez utiliser \r lors du remplacement du texte par un saut de ligne, comme ceci

:%s/%/\r/g

Mais lorsqu'il s'agit de remplacer une fin de ligne et un saut de ligne par un caractère, vous pouvez le faire comme suit :

:%s/\n/%/g 

Quelle section du manuel documente ces comportements, et quel est le raisonnement qui les sous-tend ?

199voto

Limited Atonement Points 1446

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

Quand la recherche

...

\n est une nouvelle ligne, \r est CR (retour chariot = Ctrl-M = ^M )

En cas de remplacement

...

\r est une nouvelle ligne, \n est un octet nul ( 0x00 ).

156voto

pjz Points 11925

De Documents vim sur les modèles :

\r correspond à <CR>

\n correspond à une fin de ligne - Lorsque la correspondance se fait dans une chaîne de caractères au lieu de texte tampon, un caractère de nouvelle ligne littéral est mis en correspondance.

107voto

rking Points 462

Un autre aspect de la question est que \0 qui est traditionnellement NULL, est pris dans s//\0/ pour signifier "l'ensemble du modèle apparié". (Ce qui, soit dit en passant, est redondant avec, et plus long que, & ).

  • Donc vous ne pouvez pas utiliser \0 pour signifier NULL donc vous utilisez \n
  • Donc vous ne pouvez pas utiliser \n pour signifier \n donc vous utilisez \r .
  • Donc vous ne pouvez pas utiliser \r pour signifier \r mais je ne vois pas qui voudrait ajouter ce caractère à dessein.

-☈

47voto

Aristotle Pagaltzis Points 43253

:help NL-used-for-Nul

Détails techniques :

<Nul> Les caractères du fichier sont stockés en tant que <NL> en mémoire. A l'écran ils sont affichés comme " ^@ ". La traduction est effectuée lors de la lecture et de l'écriture des fichiers. Pour faire correspondre un <Nul> avec un modèle de recherche, vous pouvez simplement entrer CTRL-@ ou " CTRL-V 000". C'est probablement ce que vous attendez. En interne, le caractère est remplacé par un caractère <NL> dans le modèle de recherche. Ce qui est inhabituel, c'est que que la saisie CTRL-V CTRL-J insère également un <NL> et cherche donc aussi un <Nul> dans le fichier. {Vi ne peut pas gérer <Nul> caractères dans le fichier}


10voto

syockit Points 3256

Tout d'abord, ouvrez :h :s voir la section "4.2 Substituer" de la documentation sur "Modifier". Voici ce que la commande accepte :

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

Remarquez la description de pattern et string

Pour le {pattern} voir |pattern| .
{string} peut être une chaîne littérale, ou quelque chose
spécial ; voir |sub-replace-special| .

Vous savez donc maintenant que le modèle de recherche et le modèle de remplacement suivent des règles différentes. Si vous suivez le lien vers |pattern| vous mènera à la section qui explique l'ensemble des modèles de regexp utilisés dans Vim.

En attendant, |sub-replace-special| vous amène à la sous-section "4.2 Substituer", qui contient les modèles de substitution, parmi lesquels se trouvent \r pour la rupture/le fractionnement de la ligne.

(Le raccourci pour accéder à cette partie du manuel est le suivant :h :s% )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X