vim apparaît sur chaque ligne se terminant par ^ M
Comment puis-je remplacer cela par un saut de ligne «normal»?
vim apparaît sur chaque ligne se terminant par ^ M
Comment puis-je remplacer cela par un saut de ligne «normal»?
Réponses:
C'est la seule chose qui a fonctionné pour moi:
: e ++ ff = dos
Trouvé sur: http://vim.wikia.com/wiki/File_format
:e ++ff=dos
suivi de :set ff=unix
convertira les terminaisons dans un format sain.
:%s/<Ctrl-V><Ctrl-M>/\r/g
Où <Ctrl-V><Ctrl-M>
signifie taper Ctrl+ Vpuis Ctrl+ M.
:%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 le caractère spécial)
/\r/
avec une nouvelle ligne ( \r
)
g
Et faites-le globalement (pas seulement la première occurrence sur la ligne).
:%s/<Ctrl-V><Ctrl-M>/\r/g
(où \ r remplace le ^ M par une nouvelle ligne).
Sous Linux et Mac OS, les travaux suivants,
:%s/^V^M/^V^M/g
où ^V^M
signifie taper Ctrl+ V, puis Ctrl+ M.
Remarque: sous Windows, vous souhaitez probablement utiliser à la ^Q
place de ^V
, car par défaut, il ^V
est mappé pour coller du texte.
%s/\r/\r/g
fonctionnait bien sur MacVim pour un fichier ne montrant qu'à la ^M
fin des lignes (une longue ligne en termes MacVim). Clairement \ r signifie différentes choses dans le modèle par rapport aux pièces de rechange de cette commande.
Dans vim
, regardez le format de fichier - DOS ou Unix:
:set filetype=unix
:set fileformat=unix
Le fichier sera réécrit sans retour chariot (CR, ^ M).
set ff=unix
comme un petit raccourci de la même manière ft
qu'un raccourci pourfiletype
Un fichier que j'avais créé avec BBEdit vu dans MacVim affichait un tas de ^M
retours de ligne au lieu de retours réguliers. Le remplacement de chaîne suivant 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'obtenir un nouveau \ r pour s'afficher correctement. Je serais intéressé de connaître les mécanismes sous-jacents de la raison pour laquelle cela fonctionne.
\r
personnages \n
malgré le fait qu'il soit spécifié \r
comme remplaçant. Je ne me plains pas, c'est exactement ce que je voulais. Juste bizarre.
Première utilisation :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éé en fileformat=dos
ajoutant "^ M ^ J" à la fin de la ligne mais lu avecflieformat=unix
supprimant uniquement le "^ J" de la fin de la ligne, laissant le "^ M" là.
Entrez simplement :e ++ff=dos
dans la ligne de commande 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.
:e ++ff=dos
puis :set ff=unix
et:w
Afin d'obtenir le caractère ^ M pour correspondre, j'ai dû le sélectionner visuellement, puis utiliser la commande Copier l'OS dans le presse-papiers pour le récupérer. Vous pouvez le tester en recherchant le personnage 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.
Il s'agit de fonctions dans MacVim, qui est basé sur gvim 7.
ÉDITER:
Avoir à nouveau ce problème sur ma machine Windows 10, qui a Ubuntu pour Windows, et je pense que cela pose des problèmes de formatage de fichier pour vim. Dans ce cas, changer le ff en unix, mac ou dos n'a fait rien d'autre que de changer le ^ M en ^ J et vice-versa.
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 je n'étais pas destructeur avec mon fichier. J'aurais pu, :%s/\r$//g
mais cela aurait supprimé les retours de chariot tout de suite 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 malgré tout)
Désolé d'avoir relancé une vieille question à laquelle il a été répondu depuis longtemps, mais il semblait y avoir une certaine confusion et j'ai pensé que j'aiderais à clarifier certaines choses car cela revient en tête dans les recherches Google.
Rien de tout cela ne fonctionnait pour moi, alors j'ai essayé ceci, qui a fonctionné:
type :%s/
presse CTRL-VCTRL-M
type //g
presse Enter
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).
^ M est récupéré par Ctrl+ Vet M, tout comme
s/^M//g
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
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
mais pas pour BSD sed
(comme on le trouve sur OSX). Quiconque corrige les sauts de ligne fonctionne probablement avec un mélange de systèmes d'exploitation, il est donc utile d'être clair sur le moment où la réponse fonctionnera.
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, il supprime le ^ M et c'est tout.
Il existe de nombreuses autres réponses à cette question, mais la solution suivante me convient le mieux, car j'avais besoin d'une solution en ligne de commande:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Explication:
myfile
:e ++ff=dos
pour forcer un rechargement de tout le fichier en tant que fins de ligne de dos.:w ++ff=unix
pour écrire le fichier à l'aide des fins de ligne UnixCtrl+ Mminimise ma fenêtre, mais Ctrl+ Enterinsère en fait un ^M
caractère. Je devais également être sûr de ne pas retirer la Ctrlclé entre les pressions.
La solution pour moi était donc:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Où <Ctrl-V><Ctrl-Enter>
signifie appuyer et maintenir enfoncé Ctrl , appuyer et relâcher V, appuyer et relâcher Enter, puis relâcher Ctrl .
La solution ci-dessus ajoutera 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 ^M
caractères sans les remplacer.
:%s/<Ctrl-V><Ctrl-Enter>//g
Où %
signifie «dans ce tampon», s
signifie «remplacer», /
signifie «(trouver) le modèle suivant», <Ctrl-V><Ctrl-Enter>
fait référence aux touches à appuyer pour obtenir le ^M
caractère (voir ci-dessus), //
signifie «sans rien» (ou «avec le modèle»). entre ces deux barres obliques, qui est vide "), et g
est un indicateur signifiant" globalement ", par opposition à la première occurrence d'une ligne.
Cela a fonctionné pour moi:
\n
fin de ligne)Donc en vim:
:set ff=unix
:w
Dans mon cas,
Rien au-dessus n'a fonctionné, j'avais un fichier CSV copié sur la machine Linux à partir de mon mac et j'ai utilisé toutes les commandes ci-dessus mais rien n'y fait mais celui ci-dessous
tr "\015" "\n" < inputfile > outputfile
J'avais un fichier dans lequel ^ M caractères étaient intercalés 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 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 sur 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
Utilisez l'une de ces commandes:
:%s/\r//g
Ou
:%s/\r\(\n\)/\1/g
Cela a fonctionné pour moi:
:% s/\r\n/\r
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 ça a réglé mon problème
:g/^M/s// /g
Si vous tapez en ^M
utilisant Shift+6 Caps+M
il n'acceptera pas.
Vous devez taper ctrl+v ctrl+m
.
^M
donne des sauts de ligne indésirables. Pour gérer cela, nous pouvons utiliser la sed
commande comme suit:
sed 's/\r//g'
Retirez-le simplement set binary
dans votre .vimrc!
Pour utiliser sed
sur MacOS, procédez comme suit:
sed -i.bak $'s/\r//' <filename>
Explication: La $'STRING'
syntaxe ici se rapporte au shell bash. Les Mac ne traitent pas \r
comme un caractère spécial. En citant la chaîne de commande dans, $''
vous dites au shell de le remplacer \r
par le \r
caractère réel spécifié dans la norme ANSI-C.
"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 battre avec \ n ctrl-v 012 (les deux me fournissant null). & a travaillé sur ce fil jusqu'à ce que j'atteigne celui de métagraphe.
\r
a bien fonctionné pour moi!
/),/s/),/)\r/g
tourné quelque chose comme ça:
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,
en 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