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

vim montre à chaque fin de ligne ^ M

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

C’est la seule chose qui a fonctionné pour moi:

: e ++ ff = dos

Trouvé à: http://vim.wikia.com/wiki/File_format

Commander

 :%s//\r/g 

signifie taper Ctrl + V puis Ctrl + M.

Explication

 :%s 

substitut,% = toutes les lignes

  

^ M caractères (le Ctrl-V est une manière Vim d’écrire le caractère Ctrl ^ et Ctrl-M écrit le M après l’expression régulière, résultant en un caractère spécial ^ M)

 /\r/ 

avec nouvelle ligne ( \r )

 g 

Et le faire globalement (pas seulement le premier événement sur la ligne).

Sur Linux et Mac OS, les travaux suivants,

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

^V^M signifie taper Ctrl + V , puis Ctrl + M.

Remarque: sous Windows, vous souhaiterez probablement utiliser ^Q au lieu de ^V , car par défaut, ^V est mappé pour coller du texte.

Dans vim , regardez le format de fichier – DOS ou Unix:

:set filetype=unix

:set fileformat=unix

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

Un fichier que j’avais créé avec BBEdit dans MacVim affichait un tas de retours de ligne ^M au lieu de retours réguliers. Le remplacement de chaîne suivant a résolu le problème – espérons 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 afficher correctement. Je serais intéressé de connaître les mécanismes sous-jacents de la raison pour laquelle cela fonctionne.

Tout d’abord, utilisez :set ff? pour comprendre le format de fichier de votre fichier.

Je suppose que cela pourrait être unix , alors le problème est que votre fichier a été créé avec fileformat=dos ajoutant “^ M ^ J” à la fin de la ligne mais lu avec flieformat=unix ne supprimant que “^ J” de la fin de la ligne, laissant le “^ M” là.

Il suffit d’entrer :e ++ff=dos dans la ligne de commande de Vim pour changer le format de votre fichier d’Unix en dos. Cela devrait résoudre le problème. Sinon, :%s/\r//g devrait vous aider.

pour que le caractère ^ M corresponde, je devais le sélectionner visuellement, puis utiliser la commande de copie du système d’exploitation dans le presse-papiers pour le récupérer. Vous pouvez le tester en effectuant une recherche du caractère avant d’essayer la commande replace.

 /^M 

devrait sélectionner la première mauvaise ligne

 :%s/^M/\r/g 

remplacera tous les errant ^ M par des retours chariot.

C’est comme les fonctions dans MacVim, qui est basé sur gvim 7.

MODIFIER:

Avoir ce problème à nouveau sur ma machine Windows 10, qui a Ubuntu pour Windows, et je pense que cela provoque des problèmes de format de fichier pour vim. Dans ce cas, changer le ff en unix, mac ou dos n’a fait que changer le ^ M en ^ J et revenir.

La solution dans ce cas:

 :%s/\r$/ /g :%s/ $//g 

La raison pour laquelle je suis allé dans cette voie est que je voulais m’assurer que je n’étais pas destructif avec mon dossier. Je pourrais avoir :%s/\r$//g mais cela aurait supprimé le retour chariot et aurait pu avoir des résultats inattendus. Au lieu de cela, nous convertissons le caractère CR singulier, ici un caractère ^ M, en un espace, puis supprimons tous les espaces à la fin des lignes (ce qui, pour moi, est un résultat souhaitable indépendamment)

Désolé pour avoir relancé une vieille question à laquelle on a répondu depuis longtemps, mais il semblait y avoir une certaine confusion à ce sujet et je pensais pouvoir aider à résoudre certains de ces problèmes, car les recherches sur Google sont nombreuses.

Aucun d’entre eux n’a fonctionné pour moi, alors j’ai essayé ceci, qui a fonctionné:

type :%s/

appuyez sur CTRL-V CTRL-M

tapez //g

appuyez sur Entrée

Donc, la commande globale dans Vim devrait ressembler à :%s/^M//g

Ce que cela fait:: :%s (rechercher et remplacer) /^M/ (ce symbole) / (sans caractères) g (globalement).

Sans avoir besoin d’utiliser Ctrl:: :%s/\r$//

Chose simple qui a fonctionné pour moi

 dos2unix filename 

Je l’ai fait avec sed:

sed -i -e 's/\r/\n/g' filename

^ M est récupéré par Ctrl + V et M , aussi

 s/^M//g 

Qu’en est-il juste de:: :%s/\r//g Cela a totalement fonctionné pour moi.

Qu’est-ce que cela fait est juste pour nettoyer la fin de ligne de toutes les lignes, il supprime le ^ M et c’est tout.

Ctrl + M minimise ma fenêtre, mais Ctrl + Entrée insère un caractère ^M Je devais aussi être sûr de ne pas décrocher la touche Ctrl entre les presses.

Donc, la solution pour moi était:

 :%s//\r/g 

signifie appuyer et maintenir la touche Ctrl enfoncée , appuyer et relâcher V , appuyer et relâcher Entrée , puis relâcher Ctrl .

Si vous travaillez sur un fichier généré par Windows

La solution ci-dessus appenda une ligne supplémentaire entre les lignes existantes, car il y a déjà un invisible \r après le ^M

Pour éviter cela, vous souhaitez supprimer les caractères ^M sans les remplacer.

 :%s///g 

% signifie “dans ce tampon”, s signifie “substitut”, / signifie “(trouve) le modèle suivant”, fait référence aux touches sur lesquelles appuyer pour obtenir le caractère ^M (voir ci-dessus), // signifie “sans rien” (ou “avec le motif entre ces deux barres obliques, qui est vide”), et g un drapeau signifiant “globalement”, par opposition à la première occurrence d’une ligne.

Il y a beaucoup d’autres réponses à cette question, mais ce qui suit fonctionne le mieux pour moi, car j’avais besoin d’une solution en ligne de commande:

 vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -cq myfile 

Explication:

  • Sans charger aucun fichier .vimrc, ouvrez myfile
  • Exécuter :e ++ff=dos pour forcer un rechargement du fichier entier en tant que fins de ligne dos.
  • Exécuter :w ++ff=unix pour écrire le fichier en utilisant les fins de ligne unix
  • Quittez vim

Dans mon cas,

Rien au-dessus n’a fonctionné, j’avais un fichier CSV copié sur une machine Linux à partir de mon mac et j’ai utilisé toutes les commandes ci-dessus, mais rien n’a aidé mais le dessous

 tr "\015" "\n" < inputfile > outputfile 

J’ai eu un fichier dans lequel ^ M caractères ont été sandwitched entre les lignes quelque chose comme ci-dessous

 Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico, 

Alternativement, il existe des utilitaires open-source appelés dos2unix et unix2dos disponibles. Sur un système Linux, ils sont probablement installés par défaut; pour un système Windows, vous pouvez les télécharger depuis http://www.bastet.com/ entre autres.

 sed s/^M//g file1.txt > file2.txt 

où ^ M est tapé en appuyant simultanément sur les 3 touches, ctrl + v + m

Cela a fonctionné pour moi:

  1. Définir le format de fichier sur unix ( \n fin de ligne)
  2. enregistrer le fichier

Donc dans vim:

 :set ff=unix :w 

Utilisez l’utilitaire dos2unix si le fichier a été créé sous Windows, utilisez l’utilitaire mac2unix si le fichier a été créé sur mac. 🙂

Cela a fonctionné pour moi:

 :% s/\r\n/\r 

Pour enregistrer les frappes , vous pouvez éviter de taper Ctrl + V Ctrl + M en le plaçant dans un mappage. Ouvrez simplement un fichier contenant un caractère ^ M, lancez-le et collez-le dans une ligne comme celle-ci dans votre fichier .vimrc:

 nnoremap d :%s/^M//g 

Aucune de ces suggestions ne fonctionnait pour moi, ayant réussi à obtenir une charge de ^M sauts de ligne en travaillant à la fois avec vim et eclipse. Je soupçonne que j’ai rencontré un cas extérieur mais au cas où cela aiderait quelqu’un je l’ai fait.

 :%s/.$//g 

Et ça a réglé mon problème

 :g/^M/s// /g 

Si vous tapez ^M utilisant Shift+6 Caps+M il n’acceptera pas.

Vous devez taper ctrl+v ctrl+m .

Je sais que c’est peut-être trop vieux, mais j’espère que quelqu’un pourra trouver cela utile.

Utilisez ces commandes:

 :%s/\r//g 

Ou

 :%s/\r\(\n\)/\1/g 

^M donne des sauts de ligne indésirables. Pour gérer cela, nous pouvons utiliser la commande sed comme suit:

 sed 's/\r//g' 

Il suffit de supprimer set binary dans votre fichier .vimrc!

“Cette fonction conserve la liste des sauts

 fun! Dos2unixFunction() let _s=@/ let l = line(".") let c = col(".") try set ff=unix w! "%s/\%x0d$//e catch /E32:/ echo "Sorry, the file is not saved." endtry let @/=_s call cursor(l, c) endfun com! Dos2Unix keepjumps call Dos2unixFunction() 

J’ai passé un après-midi à me débattre avec \ n ctrl-v 012 (les deux me fournissant des valeurs nulles). & travaillé à travers ce fil jusqu’à ce que je suis arrivé à métagraphe.

Je travaillais bien pour moi!

 /),/s/),/)\r/g 

tourné quelque chose comme ceci:

liste noire supplémentaire: i386 (0.4.1, 0.4.1 + nmu1), libmount1: i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1: i386 (2.20.1-5.1, 2.20.1-5.2) , libapt-pkg4.12: i386 (0.9.7.4, 0.9.7.5), nmap: i386 (6.00-0.1, 6.00-0.2), libsane-common: i386 (1.0.22-7.3,

dans quelque chose comme ça:

26 libwv-1.2-4: i386 (1.2.9-3, automatique)
27 openjdk-6-jre-headless: i386 (6b24-1.11.4-3, automatique)
28 jed: i386 (0.99.19-2.1)

La magie. Je suis profondément reconnaissant

Ou au lieu d’utiliser vim, vous pouvez simplement réparer les sauts de ligne en utilisant cette commande

 fromdos  

J’espère que cela aide!