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

StackOverflow https://stackoverflow.com/questions/811193

  •  03-07-2019
  •  | 
  •  

Question

vim montre sur chaque ligne se terminant ^ M

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

Était-ce utile?

La solution

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

  

: e ++ ff = dos

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

Autres conseils

Commande

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

<Ctrl-V><Ctrl-M> signifie que vous tapez Ctrl + V , puis Ctrl + M .

Explication

:%s

substitue,% = toutes les lignes

<Ctrl-V><Ctrl-M>

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

/\r/

avec une nouvelle ligne (\r)

g

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

Sous Linux et Mac OS, les opérations suivantes fonctionnent,

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

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

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

Dans vim, regardez le format de fichier & # 8212; 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 et visible dans MacVim affichait un ensemble de ^M retours à la ligne au lieu de retours normaux. La chaîne suivante remplace le problème résolu. 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 caractère pour s’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 déterminer le format de fichier de votre fichier.

Je suppose que cela pourrait être unix, le problème est que votre fichier a été créé avec fileformat=dos l'ajout de " ^ M ^ J " à la fin de la ligne mais lu avec flieformat=unix ne supprimant que le " ^ J " à partir de la fin de la ligne, en laissant le " ^ M & "; Là.

Il vous suffit de saisir :e ++ff=dos en ligne de commande Vim pour modifier le format de votre fichier de Unix à DOS. Cela devrait résoudre le problème. Sinon, :%s/\r//g devrait vous aider.

afin de faire correspondre le caractère ^ M, je devais le sélectionner visuellement, puis utiliser la commande copier dans le presse-papier du système d'exploitation pour le récupérer. Vous pouvez le tester en recherchant le caractère avant d'essayer la commande de remplacement.

/^M

doit sélectionner la première ligne incorrecte

:%s/^M/\r/g

remplacera tous les errants ^ M par des retours à la ligne.

Il s’agit de fonctions dans MacVim, basé sur gvim 7.

EDIT:

Avoir ce problème à nouveau sur ma machine Windows 10, qui utilise Ubuntu pour Windows, et je pense que cela cause 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 inversement.

La solution dans ce cas:

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

La raison pour laquelle j'ai choisi cette voie est que je voulais m'assurer que mon fichier était non destructif. J'aurais pu :%s/\r$//g mais cela aurait supprimé les retours à la ligne 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, peu importe)

Désolé de faire revivre une vieille question à laquelle on a répondu depuis longtemps, mais il semblait y avoir une certaine confusion et je pensais pouvoir aider à clarifier une partie de cette question, car elle figure en bonne place dans les recherches sur Google.

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

tapez :%s/

appuyez sur CTRL-V CTRL-M

tapez //g

appuyez sur Entrée

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

Signification: :%s (rechercher et remplacer) /^M/ (ce symbole) / (sans caractère) 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 , il en va de même

s/^M//g

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

Cela ne fait que nettoyer la fin de ligne de toutes les lignes, cela supprime le ^ M et le tour est joué.

Ctrl + M réduit ma fenêtre, mais Ctrl + Entrée insère en réalité un caractère ^M. Je devais aussi être sûr de ne pas soulever la touche Ctrl entre les appuis.

La solution pour moi était donc:

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

<Ctrl-V><Ctrl-Enter> signifie appuyer et maintenir enfoncé Ctrl , appuyer et relâcher V , appuyer et relâcher Entrée , puis relâchez Ctrl .

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

La solution ci-dessus ajoute une ligne supplémentaire entre les lignes existantes, car il existe déjà un \r invisible après le %.

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

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

/ signifie " dans ce tampon, " // signifie " substituer, " g signifie " (trouver) le modèle suivant, " <=> fait référence aux touches sur lesquelles appuyer pour obtenir le caractère <=> (voir ci-dessus), <=> signifie & "sans rien &"; (ou " avec le motif entre ces deux barres obliques, qui est vide & ";), et <=> est un indicateur qui signifie &" globalement, quot; par opposition à la première occurrence dans une ligne.

Il existe de nombreuses autres réponses à cette question, mais voici ce qui 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 charger aucun fichier .vimrc, ouvrez myfile
  • Exécuter :e ++ff=dos pour forcer le rechargement de la totalité du fichier sous forme d'extrémités de ligne.
  • Exécuter :w ++ff=unix pour écrire le fichier avec des fins de ligne Unix
  • Quittez vim

Cela a fonctionné pour moi:

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

Donc, dans vim:

:set ff=unix
:w

Dans mon cas,

Rien de ce qui précède n'a fonctionné. Un fichier CSV a été copié sur un ordinateur Linux à partir de mon Mac et j'ai utilisé toutes les commandes ci-dessus, mais rien n'a aidé sauf celui ci-dessous

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

J'avais un fichier dans lequel ^ M caractères ont été passés entre lignes, 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 qui font exactement 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 à partir de http://www.bastet.com/ , entre autres.

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

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

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 saisir Ctrl + V Ctrl + M en plaçant ceci dans un mapping. Ouvrez simplement un fichier contenant un caractère ^ M, tirez-le et collez-le dans une ligne comme celle-ci dans votre fichier .vimrc:

nnoremap <Leader>d :%s/^M//g<CR>

Aucune de ces suggestions ne fonctionnait pour moi car j'ai réussi à avoir une charge de ^M sauts de ligne lorsque je travaillais avec vim et eclipse. Je soupçonne avoir rencontré un cas externe, mais au cas où cela pourrait aider quelqu'un que je connaissais.

:%s/.$//g

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

:g/^M/s// /g

Si vous tapez ^M avec Shift+6 Caps+M il ne sera pas accepté.

Vous devez taper ctrl+v ctrl+m.

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

sed 's/\r//g'

Supprimez simplement set binary votre fichier .vimrc!

Utilisez l'une de ces commandes:

:%s/\r//g

Ou

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

" Cette fonction préserve 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 à lutter avec \ n ctrl-v 012 (les deux me fournissant null). & amp; travaillé à travers ce fil jusqu'à ce que j'atteigne métagraphe.

\r a bien fonctionné pour moi!

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

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

Magie. Je suis profondément reconnaissant

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top