501 votes

Comment convertir le saut de ligne ^M en saut de ligne 'normal' dans un fichier ouvert dans vim ?

Vim affiche sur chaque ligne se terminant par ^M

Comment puis-je le remplacer par un saut de ligne "normal" ?

0 votes

3 votes

Veuillez modifier la solution à la changement de format de fichier parce que c'est la solution la plus propre.

1 votes

Je sais que cette question concerne vim, mais d'autres recherches sur Google ont également abouti à ce fil de discussion. Donc, si vous avez Eclipse installé sur votre système, vous pouvez convertir le délimiteur de ligne pour un seul fichier ou une arborescence complète de fichiers en quelques clics : stackoverflow.com/a/7019737/1364747

592voto

LeopardSkinPillBoxHat Points 11851

Commande

:%s/<Ctrl-V><Ctrl-M>/\r/g

<Ctrl-V><Ctrl-M> type de moyen Ctrl + V puis Ctrl + M .

Explication

:%s

substitut, % = toutes les lignes

<Ctrl-V><Ctrl-M>

Caractères ^M (le Ctrl-V est une façon pour Vim d'écrire le caractère Ctrl ^ et le Ctrl-M écrit le M après l'expression régulière, ce qui donne le caractère spécial ^M)

/\r/

avec une nouvelle ligne ( \r )

g

Et faites-le globalement (pas seulement la première occurrence sur la ligne).

0 votes

@luckytaxi - qu'est-ce qu'il fait pour vous ?

21 votes

Il a supprimé les caractères ^M mais n'a pas inséré le retour chariot.

0 votes

Cela ne fonctionne pas, du moins sur Ubuntu. J'obtiens l'erreur suivante E486: Pattern not found: <Ctrl-V><Ctrl-M>

423voto

Paul Tomblin Points 83687

Sous Linux et Mac OS, la méthode suivante fonctionne,

:%s/^V^M/^V^M/g

donde ^V^M type de moyen Ctrl + V alors Ctrl + M .

Note : sous Windows, vous voudrez probablement utiliser <code>^Q</code> au lieu de <code>^V</code> puisque par défaut <code>^V</code> est mis en correspondance avec le texte à coller.

3 votes

Pourquoi est-ce que ça a été descendu ? Ça marche, même lorsque votre fichier est écrasé sur une ligne parce qu'il n'a pas le bon bout de ligne.

0 votes

Cela fonctionne vraiment et c'est exactement ce dont vous avez besoin lorsque tout votre texte est sur une seule ligne.

0 votes

%s/^V^M/^V^M/g ne devrait-il pas être %s/^V^M//g ?

185voto

Jonathan Leffler Points 299946

Sur vim Regardez le format du fichier - DOS ou Unix :

:set filetype=unix

:set fileformat=unix

Le fichier sera réécrit sans caractères de retour de chariot (CR, ^M).

3 votes

Use :set fileformat=unix Pour la plupart des configurations, filetype ne modifie que le type de syntaxe utilisé.

6 votes

Cela a corrigé le bug que j'avais... Vim commençait à penser que mon fichier au format UNIX était Windows et les lignes nouvellement modifiées affichaient ^M dans le diff git.

0 votes

Doit être dépendant du système. Aujourd'hui, celui-ci a fonctionné. La commande set se fait dans vim, btw.

119voto

netpoetica Points 889

Un fichier que j'avais créé avec BBEdit vu en MacVim affichait un tas de ^M des retours de ligne au lieu des retours normaux. Le remplacement de la chaîne de caractères suivant a résolu le problème - j'espère que cela vous aidera :

:%s/\r/\r/g

C'est intéressant parce que je remplace les sauts de ligne par le même caractère, mais je suppose que Vim a juste besoin d'un nouveau \r pour s'afficher correctement. Je serais intéressé de connaître les mécanismes sous-jacents qui expliquent pourquoi cela fonctionne.

1 votes

Les fonctions de recherche ont tendance à accepter des règles plus larges pour reconnaître les séquences de fin de ligne. Mais \r a une signification spécifique lorsqu'il est écrit sous forme de données.

0 votes

Cela a fonctionné pour moi dans gVim Windows pour régler un fichier qui n'avait pas de sauts de ligne, juste beaucoup de ^M à la place.

4 votes

De toutes les solutions proposées sur cette page, c'est le seul modèle qui a fonctionné pour moi en supprimant ^M d'un fichier csv. En utilisant MacVim.

35voto

chenxsan Points 373

D'abord, utilisez :set ff? pour savoir quel est le format de votre fichier.

Je suppose que ça pourrait être unix alors le problème est que votre fichier a été créé avec fileformat=dos ajouter "^M^J" à la fin de la ligne mais lire avec flieformat=unix en enlevant seulement le "^J" de la fin de la ligne, en laissant le "^M" là.

Il suffit de saisir :e ++ff=dos dans la ligne de commande de Vim pour changer le format de votre fichier d'unix à dos. Cela devrait résoudre le problème. Si ce n'est pas le cas, :%s/\r//g devrait vous aider.

3 votes

J'ai dû faire les deux. :e ++ff=dos puis :set ff=unix y :w

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