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

Vim s'affiche sur chaque ligne se terminant ^M

Comment je fais pour remplacer cela par un saut de ligne 'normal'?

440
demandé sur oberlies 2009-05-01 16:44:09

30 réponses

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

: e ++ff = dos

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

86
répondu Pam 2014-04-02 15:30:11

Commande

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

<Ctrl-V><Ctrl-M> signifie que le type Ctrl+V, puis Ctrl+M.

Explication

:%s

Substitut, % = toutes les lignes

<Ctrl-V><Ctrl-M>

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

/\r/

Avec une nouvelle ligne (\r)

g

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

518
répondu LeopardSkinPillBoxHat 2016-05-13 22:06:06

Sous Linux et Mac OS, les travaux suivants,

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

^V^M signifie que le type Ctrl+V, puis Ctrl+M.

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

398
répondu Paul Tomblin 2017-01-17 13:45:35

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).

172
répondu Jonathan Leffler 2012-11-28 00:43:40

Un fichier que j'avais créé avec BBEdit vu dans MacVim affichait un tas de ^M retourne au lieu de régulières. La chaîne suivante replace a résolu le problème-espérons que cela aide:

:%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 la mécanique sous-jacente de pourquoi cela fonctionne.

91
répondu netpoetica 2018-09-06 10:11:04

Tout d'Abord, utilisez :set ff? pour déterminer 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 le "^J" de la fin de la ligne, laissant le "^M" là.

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

34
répondu chenxsan 2012-03-07 04:01:20

Afin de faire correspondre le caractère ^M, j'ai dû le sélectionner visuellement, puis utiliser la commande Copier dans le presse-papiers du système d'exploitation 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 ^ m errants par des retours chariot.

C'est comme 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 rien d'autre que de changer le ^M en ^J et inversement.

La solution dans ce cas:

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

La raison pour laquelle je suis allé dans cette voie est parce que je voulais m'assurer que j'étais non destructif avec mon fichier. J'aurais pu :%s/\r$//g mais cela aurait supprimé les retours chariot dès la sortie, 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é d'avoir ravivé une vieille question à laquelle on a répondu depuis longtemps, mais il semblait y avoir une certaine confusion et j'ai pensé que j'aiderais à éclaircir une partie de cela car cela arrive très haut dans les recherches google.

27
répondu Metagrapher 2017-09-12 13:48:45

Aucun de ceux-ci n'a fonctionné pour moi, alors j'ai essayé ceci, qui a fonctionné:

De Type :%s/

Appuyez sur CTRL-VCTRL-M

De Type //g

Appuyez Sur Entrer

Ainsi, la commande globale dans Vim shoud ressemble à :%s/^M//g

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

21
répondu d-_-b 2014-05-31 20:30:48

Sans avoir besoin D'utiliser Ctrl: :%s/\r$//

13
répondu Brian Harman 2015-10-06 19:46:01

Chose Simple qui a fonctionné pour moi

dos2unix   filename
12
répondu Shahzeb 2014-11-07 07:30:16

Je l'ai fait avec sed:

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

12
répondu Freedom_Ben 2015-09-17 08:11:53

^M est récupéré par Ctrl+V et M, de sorte do

s/^M//g
11
répondu Andrew Sledge 2015-09-19 08:26:08

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

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

9
répondu tonatiuh-N 2014-07-11 12:47:32

Ctrl+M réduit ma fenêtre, mais Ctrl+Saisissez réellement insère un ^M caractères. Je devais aussi être sûr de ne pas enlever la touche Ctrl entre les presses.

Donc la solution pour moi était:

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

<Ctrl-V><Ctrl-Enter> moyens de appuyez et maintenez Ctrl, appuyez sur et relâchez - V, appuyez sur et relâchez - Entrer, et puis relâchez Ctrl.

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

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

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

:%s/<Ctrl-V><Ctrl-Enter>//g

% signifie "dans ce tampon," s signifie "substitut," / signifie "(trouver) le schéma suivant," <Ctrl-V><Ctrl-Enter> désigne les touches à presser pour obtenir le ^M caractère (voir ci-dessus), // signifie "rien" (ou, "avec le motif entre ces deux barres obliques, qui est vide"), et g est un flag signifiant "globalement", par opposition à la première occurrence d'une ligne.

8
répondu CrannDarach 2017-04-04 15:55:11

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

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

Explication:

  • sans en charger .fichiers vimrc, ouvrir myfile
  • exécutez :e ++ff=dos pour forcer un rechargement du fichier entier en tant que terminaisons de ligne dos.
  • exécutez :w ++ff=unix pour écrire le fichier en utilisant les terminaisons de ligne unix
  • Quitter vim
8
répondu Micah Smith 2017-04-22 15:04:25

Dans mon cas,

Rien ci-dessus n'a fonctionné, j'ai eu 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 celui ci-dessous

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

J'avais un fichier dans lequel les caractères ^m étaient pris en sandwich 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,
7
répondu Vishwanath gowda k 2016-12-04 02:53:34

Cela a fonctionné pour moi:

  1. définissez le format de fichier sur unix (\n fin de ligne)
  2. enregistrez le fichier

Donc dans vim:

:set ff=unix
:w
6
répondu Stryker 2016-12-01 10:07:00

Alternativement, il existe des utilitaires open-source appelés dos2unix et unix2dos disponibles qui font cela. 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.

5
répondu ConcernedOfTunbridgeWells 2009-05-01 13:10:59
sed s/^M//g file1.txt > file2.txt

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

5
répondu Blue Diamond 2014-09-15 06:51:36

Utilisez l'utilitaire dos2unix si le fichier a été créé sous windows, utilisez l'utilitaire mac2unix si le fichier a été créé sur mac. :)

4
répondu Ramesh 2012-09-25 12:29:04

Cela a fonctionné pour moi:

:% s/\r\n/\r
2
répondu ContextSwitch 2014-04-18 01:09:34

À enregistrer les frappes de touches, vous pouvez éviter de taper Ctrl+VCtrl+M de la placer dans une cartographie. Ouvrez simplement un fichier contenant un caractère ^M, tirez-le et collez-le dans une ligne comme celle-ci dans votre .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>
1
répondu agouge 2013-12-06 09:18:44

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

:%s/.$//g

Et il a réglé mon problème

1
répondu rogermushroom 2014-04-04 13:28:46
:g/^M/s// /g

Si vous tapez ^M en utilisant Shift+6 Caps+M Il n'acceptera pas.

, Vous devez taper ctrl+v ctrl+m.

1
répondu Shravan Kumar 2015-04-30 05:42:40

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

Utilisez l'une de ces commandes:

:%s/\r//g

Ou

:%s/\r\(\n\)/\1/g
1
répondu Muhammad Reda 2015-06-10 10:45:49

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

sed 's/\r//g'
1
répondu Manoj Kumar 2016-07-20 20:50:52

Il suffit de supprimerset binary dans votre .vimrc!

1
répondu Alex Falcucci 2017-05-26 12:37:31

" 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()
0
répondu SergioAraujo 2011-04-25 23:06:30

J'ai passé un après-midi à lutter avec \n ctrl-v 012 (les deux me fournissent null). & a travaillé à travers ce fil jusqu'à ce que j'atteigne celui de metagraph.

\r a bien fonctionné pour moi!

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

Tourné quelque chose comme ceci:

Blacklist-extra: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-commune: i386 (1.0.22-7.3,

Dans quelque chose comme ceci:

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)

Magie. Je suis profondément reconnaissant

0
répondu user1997684 2013-01-21 16:45:09

Ou au lieu d'utiliser vim, vous pouvez simplement corriger les sauts de ligne en utilisant cette commande

fromdos <filename.txt>

J'espère que ça aide!

0
répondu bsmoo 2013-03-17 16:39:39