Dans l'éditeur vim, je souhaite remplacer un caractère de nouvelle ligne (\ n) par deux nouveaux caractères de ligne (\ n \ n) à l'aide du mode de commande vim.
Contenu du fichier d'entrée:
This is my first line.
This is second line.
Commande que j'ai essayée:
:%s/\n/\n\n/g
il remplace la chaîne par des caractères indésirables comme
This is my first line.^@^@This is second line.^@^@
Puis j'ai essayé la commande suivante
:%s/\n/\r\r/g
Cela fonctionne correctement. Pouvez-vous expliquer pourquoi cela fonctionne bien avec la deuxième commande?
vim
regular-expression
vi-mode
Raghvendra
la source
la source
/
comme séparateur. C'est plus lisible::%s;\n;\n\n;g
\n
, remplacer par\r\r
,:% s/\n/\r\r/g
: stackoverflow.com/a/71334/911945Réponses:
Curieusement,
\n
vim for replacement ne signifie pas newline, mais null. ASCII nul est^@
( control@).Historiquement, vi remplace
^M
( controlM) en tant que fin de ligne, qui est la nouvelle ligne. vim a ajouté une extension\r
(comme le langage C) pour signifier la même chose que^M
, mais les développeurs ont choisi de donner la\n
valeur null en remplaçant le texte. Ceci est incompatible avec son utilisation dans les recherches , qui trouvent une nouvelle ligne.Lectures complémentaires:
la source
Essayez ceci:
%s/$/^V^M/
(où^V
estCtrl-V
et^M
estCtrl-M
- lorsque vous tapez^V
, un caractère apparaît,^
puis un retour arrière au-dessus de celui-ci, puis, lorsque vous tapez,^M
il apparaît sous la forme^M
... le caractère Ctrl-V est le caractère littéral standard standard - exécutez la commandestty -a
pour montrer les caractères spéciaux de votre tty).la source
vim
utiliser\n
pour représenter un caractère nul\0
en mémoire, que levim
fichier handle contienne un caractère nul (alors quevi
ne peut pas).Utilisation de la
\n
correspondance uniquement en fin de ligne dans la mémoire tampon, pas de nouvelle ligne dans la chaîne lors de l'utilisation de l'expression.Voir : h NL-used-for-Null et : h CR-used-for-NL pour plus de détails.
la source
Testé avec Neovim (
nvim
) et sesVim
versionsSupprimer une nouvelle ligne:
Ici,
\n
correspond à la nouvelle ligne (pour insérer une nouvelle ligne, cependant, utilisez\r
):Ajouter une nouvelle ligne:
Nan:
^@
est un signe diacritique pour LF (saut de ligne; voir http://vimhelp.appspot.com/digraph.txt.html#digraphs-default )Oui:
Pour répondre à la question du PO (comment remplacer un
\n
par deux,\n\n
), ajoutez-en une autre\r
:... c'est-à-dire correspondre à la nouvelle ligne d'origine (
\n
) et la remplacer par deux nouvelles lignes / retours à la ligne (\r\r
).la source