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?
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é.
De http://vim.wikia.com/wiki/Search_and_replace :
lors de la recherche
...
\n
est newline,\r
estCR
(retour chariot =Ctrl-M
=^M
)lors du remplacement
...
\r
est newline,\n
est un octet nul (0x00
).
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, &
).
\0
signifie NULL
, vous utilisez donc \n
\n
vouloir dire \n
, vous utilisez donc \r
.\r
vouloir dire \r
, mais je ne sais pas qui voudrait ajouter ce caractère volontairement.—☈
: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}
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%
)