web-dev-qa-db-fra.com

Pourquoi est-ce une nouvelle ligne pour Vim?

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

:%s/%/\r/g

Mais lorsque vous remplacez les fins de lignes et les nouvelles lignes d'un personnage, 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?

243
Vinko Vrsalovic

De vim docs sur les patterns :

\r correspond à <CR>

\n correspond à une fin de ligne - Lors de la mise en correspondance d'une chaîne au lieu d'un texte tampon, un caractère de nouvelle ligne littéral est recherché.

154
pjz

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

lors de la recherche

...

\n est newline, \r est CR (retour chariot = Ctrl-M = ^M)

lors du remplacement

...

\r est newline, \n est un octet nul (0x00).

190
Limited Atonement

Un autre aspect de ceci est que \0, qui est traditionnellement NULL, est pris en s//\0/ signifie "tout le motif correspondant". (Qui, soit dit en passant, est redondant avec, et plus long que, &).

  • Donc, vous ne pouvez pas utiliser \0 signifie NULL, vous utilisez donc \n
  • Donc, vous ne pouvez pas utiliser \n vouloir dire \n, vous utilisez donc \r.
  • Donc, vous ne pouvez pas utiliser \r vouloir dire \r, mais je ne sais pas qui voudrait ajouter ce caractère volontairement.

—☈

105
rking

:help NL-used-for-Nul

Détail technique:

<Nul> les caractères du fichier sont enregistrés en tant que <NL> en mémoire. Ils apparaissent à l'écran sous la forme "^@ ". La traduction est effectuée lors de la lecture et de l’écriture de fichiers. Pour correspondre à un <Nul> avec un motif de recherche, vous pouvez simplement entrer CTRL - @ ou " CTRL-V 000". C'est probablement ce à quoi vous vous attendez. En interne, le caractère est remplacé par un <NL> dans le motif de recherche. Ce qui est inhabituel, c’est que la frappe CTRL-VCTRL-J insère également un <NL>, cherche donc aussi un <Nul> dans le fichier. {Vi ne peut pas gérer <Nul> caractères dans le fichier du tout}


47
Aristotle Pagaltzis

Tout d’abord, ouvrez :h :s pour voir la section "4.2 Suppléant" de la documentation sur "Changer". 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 comme ça
spécial; voir |sub-replace-special| .

Alors maintenant, vous savez que le modèle de recherche et les modèles de remplacement suivent des règles différentes. Si vous suivez le lien vers |pattern|, Vous accédez à la section qui explique tous les modèles d’expression rationnelle utilisés dans Vim.

Pendant ce temps, |sub-replace-special| Vous amène à la sous-section de "4.2 Substitute", qui contient les modèles de substitution, parmi lesquels \r Pour les sauts de ligne/fractionnements.

(Le raccourci vers cette partie du manuel est :h :s% )

10
syockit