La saisie :digraphsdans vim montre la table de digrammes à laquelle @LightnessRacesinOrbit est lié.
askewchan
1
Lorsque vous essayez de remplacer ce type de personnage à l'aide de php, essayez ceci, preg_replace('/[\x01]/', ' ' ,$str); cela vous aidera.
Rachel Geller
Réponses:
561
Unix utilise 0xA pour un caractère de nouvelle ligne. Windows utilise une combinaison de deux caractères: 0xD 0xA. 0xD est le caractère de retour chariot. ^Mse trouve être la façon dont vim affiche 0xD (0x0D = 13, M est la 13e lettre de l'alphabet anglais).
Vous pouvez supprimer tous les ^Mcaractères en exécutant ce qui suit:
:%s/^M//g
Où ^Mest entré en maintenant Ctrlet en tapant vsuivi m, puis relâchez Ctrl. Ceci est parfois abrégé en ^V^M, mais notez que vous devez le saisir comme décrit dans la phrase précédente, plutôt que de le taper littéralement.
Cette expression remplacera toutes les occurrences de ^Mpar la chaîne vide (c'est-à-dire rien). Je l'utilise pour me débarrasser des ^Mfichiers copiés de Windows vers Unix (Solaris, Linux, OSX).
Juste au cas où vous êtes sur Windows, Ctrl + V sera probablement mappé pour coller. Si c'est le cas, les valeurs par défaut remappent la touche "d'échappement de caractère spécial" à Ctrl + Q.
R. Martinho Fernandes
8
La vraie question est de savoir pourquoi Vim détecte parfois automatiquement les fins de ligne et s'affiche correctement, et parfois non.
Scott
10
Vous verrez le ^Mcaractère si le fichier a des fins de ligne incompatibles. Utilisez la commande fournie par Tomasz, puis tapez en :fileformat={unix|dos|mac}fonction du système d'exploitation que vous ciblez. S'il n'y a que quelques lignes sans le ^Mcaractère, vous le voulez probablement :fileformat=dos. Si vous modifiez des fichiers dans un éditeur autre que vim, assurez-vous qu'il est configuré pour correspondre aux fins de ligne (le Bloc-notes ne le fera pas, mais tout éditeur réputé comme Notepad ++ ou TextMate le fera).
Mikkel Paulson
9
Remarque pour les débutants vi, cette commande doit être saisie manuellement. Le coller simplement dans un terminal ouvert en vicours d' exécution entraînera une erreur "modèle introuvable".
IQAndreas
51
@bluesm que j'avais réellement besoin d'utiliser :%s/\r//gpour remplacer les retours chariot dans mon fichier. Le motif ^ V ^ M est introuvable dans le fichier dans
lequel
139
:%s/\r//g
a travaillé pour moi aujourd'hui. Mais ma situation a peut-être été légèrement différente.
l'option g n'est pas requise, il n'y a qu'une nouvelle ligne par ligne. :%s/\r//suffirait.
frogcoder
7
L'option g peut très bien être requise, car un retour chariot n'est pas nécessairement une nouvelle ligne. Lorsqu'il est ouvert en mode Unix, le retour chariot n'est qu'un autre caractère, et lorsqu'il est ouvert en mode Windows, le retour chariot n'est spécial que immédiatement suivi d'un saut de ligne.
Jonathan Baldwin
65
Pour traduire la nouvelle ligne au lieu de la supprimer:
Qu'est-ce que cela est réellement censé faire? Pour moi, on dirait qu'il fait une substitution de semblable à semblable, ce que je ne peux pas imaginer changerait quoi que ce soit. Suis-je en train de manquer quelque chose de spécial sur le fonctionnement de la syntaxe ici?
Platinum Azure
16
@PlatinumAzure Je ne sais pas pourquoi personne n'a jamais pensé à répondre à votre question. \ra un comportement différent dans la partie de recherche par rapport à la partie de remplacement. Voir stackoverflow.com/a/3834303 par exemple.
@TomD Le lien fait référence à la réponse sur laquelle vous commentez.
bzeaman
Pour moi, cela a remplacé les personnages ennuyeux par une nouvelle ligne supplémentaire. La réponse @ dlk5730 a mieux fonctionné pour moi. ie:%s/\r//g
marcusshep
37
Cela signifie probablement que vous avez des retours chariot (différents systèmes d'exploitation utilisent différentes manières de signaler la fin de ligne).
Utilisez dos2unixpour corriger les fichiers ou définir les formats de fichiers dans vim:
J'ai obtenu un fichier texte généré à l'origine sur une machine Windows par le biais d'un utilisateur Mac et je devais l'importer dans une base de données Linux MySQL en utilisant le load data commande.
Bien que VIM affiche le caractère '^ M', rien de ce qui précède ne fonctionnait pour mon problème particulier, les données importaient mais étaient toujours corrompues d'une manière ou d'une autre. La solution a finalement été assez simple (après beaucoup de frustration).
Solution: exécuter dos2unixDEUX FOIS sur le même fichier a fait l'affaire! L'utilisation de la filecommande montre ce qui se passe en cours de route.
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
Et la version finale du fichier a été parfaitement importée dans la base de données.
Si cela casse votre configuration et que les caractères ^ M sont requis dans les mappages, vous pouvez simplement remplacer les caractères ^ M par <Enter>ou même <C-m>(tous deux tapés comme de simples séquences de caractères, donc 7 et 5 caractères, respectivement).
Il s'agit du seul moyen portable recommandé de stocker des codes clés spéciaux dans les mappages.
Si vous n'avez pas spécifié un autre fileformatintentionnellement (par exemple, :e ++ff=unixpour un fichier Windows), il est probable que le fichier cible ait des EOL mixtes.
Par exemple, si un fichier a des lignes avec des <CR><NL>fins et d'autres avec des
<NL>fins, et fileformatest défini unixautomatiquement par Vim lors de sa lecture, ^M (<CR>)apparaîtra. Dans de tels cas, fileformatsentre en jeu. Voir :help ffspour les détails.
J'ai découvert que je polluais des fichiers depuis des semaines en raison du fait que mon instance Homebrew Mvim était configurée pour utiliser filetype = dos. Apporté le changement requis dans .vimrc ....
:digraphs
dans vim montre la table de digrammes à laquelle @LightnessRacesinOrbit est lié.preg_replace('/[\x01]/', ' ' ,$str);
cela vous aidera.Réponses:
Unix utilise 0xA pour un caractère de nouvelle ligne. Windows utilise une combinaison de deux caractères: 0xD 0xA. 0xD est le caractère de retour chariot.
^M
se trouve être la façon dont vim affiche 0xD (0x0D = 13, M est la 13e lettre de l'alphabet anglais).Vous pouvez supprimer tous les
^M
caractères en exécutant ce qui suit:Où
^M
est entré en maintenant Ctrlet en tapant vsuivi m, puis relâchez Ctrl. Ceci est parfois abrégé en^V^M
, mais notez que vous devez le saisir comme décrit dans la phrase précédente, plutôt que de le taper littéralement.Cette expression remplacera toutes les occurrences de
^M
par la chaîne vide (c'est-à-dire rien). Je l'utilise pour me débarrasser des^M
fichiers copiés de Windows vers Unix (Solaris, Linux, OSX).la source
^M
caractère si le fichier a des fins de ligne incompatibles. Utilisez la commande fournie par Tomasz, puis tapez en:fileformat={unix|dos|mac}
fonction du système d'exploitation que vous ciblez. S'il n'y a que quelques lignes sans le^M
caractère, vous le voulez probablement:fileformat=dos
. Si vous modifiez des fichiers dans un éditeur autre que vim, assurez-vous qu'il est configuré pour correspondre aux fins de ligne (le Bloc-notes ne le fera pas, mais tout éditeur réputé comme Notepad ++ ou TextMate le fera).vi
, cette commande doit être saisie manuellement. Le coller simplement dans un terminal ouvert envi
cours d' exécution entraînera une erreur "modèle introuvable".:%s/\r//g
pour remplacer les retours chariot dans mon fichier. Le motif ^ V ^ M est introuvable dans le fichier dansa travaillé pour moi aujourd'hui. Mais ma situation a peut-être été légèrement différente.
la source
:%s/\r//
suffirait.Pour traduire la nouvelle ligne au lieu de la supprimer:
la source
\r
a un comportement différent dans la partie de recherche par rapport à la partie de remplacement. Voir stackoverflow.com/a/3834303 par exemple.:%s/^V^M/^V^M/g
voir ici:%s/\r//g
Cela signifie probablement que vous avez des retours chariot (différents systèmes d'exploitation utilisent différentes manières de signaler la fin de ligne).
Utilisez
dos2unix
pour corriger les fichiers ou définir les formats de fichiers dans vim:la source
Supposons que votre fichier texte soit - file.txt, puis exécutez cette commande -
Il convertit le fichier texte du format dos au format unix.
la source
J'ai obtenu un fichier texte généré à l'origine sur une machine Windows par le biais d'un utilisateur Mac et je devais l'importer dans une base de données Linux MySQL en utilisant le
load data
commande.Bien que VIM affiche le caractère '^ M', rien de ce qui précède ne fonctionnait pour mon problème particulier, les données importaient mais étaient toujours corrompues d'une manière ou d'une autre. La solution a finalement été assez simple (après beaucoup de frustration).
Solution: exécuter
dos2unix
DEUX FOIS sur le même fichier a fait l'affaire! L'utilisation de lafile
commande montre ce qui se passe en cours de route.Et la version finale du fichier a été parfaitement importée dans la base de données.
la source
Sous Unix, il est probablement plus facile d'utiliser la commande «tr».
la source
Je les ai tous retirés avec sed:
sed -i -e 's/\r//g' <filename>
Pourrait également remplacer par une chaîne ou un caractère différent:
sed -i -e 's/\r/string/g' <filename>
Ces
sed
commandes fonctionnent sur la version GNU / Linux desed
mais peuvent nécessiter des ajustements sur les BSD (y compris macOS).la source
Vous pouvez résoudre ce problème dans vim en utilisant
où ^ est le caractère de contrôle.
la source
^M
est.C'est la seule chose qui a fonctionné dans mon cas:
:e ++ff=dos
:wq
la source
Si cela casse votre configuration et que les caractères ^ M sont requis dans les mappages, vous pouvez simplement remplacer les caractères ^ M par
<Enter>
ou même<C-m>
(tous deux tapés comme de simples séquences de caractères, donc 7 et 5 caractères, respectivement).Il s'agit du seul moyen portable recommandé de stocker des codes clés spéciaux dans les mappages.
la source
Dans FreeBSD, vous pouvez effacer
^M
manuellement en tapant ce qui suit::%s/
Ctrl+ V, Puis Ctrl+ M, puis Ctrl+ à Mnouveau.la source
Si vous n'avez pas spécifié un autre
fileformat
intentionnellement (par exemple,:e ++ff=unix
pour un fichier Windows), il est probable que le fichier cible ait des EOL mixtes.Par exemple, si un fichier a des lignes avec des
<CR><NL>
fins et d'autres avec des<NL>
fins, etfileformat
est définiunix
automatiquement par Vim lors de sa lecture,^M (<CR>)
apparaîtra. Dans de tels cas,fileformats
entre en jeu. Voir:help ffs
pour les détails.la source
J'ai découvert que je polluais des fichiers depuis des semaines en raison du fait que mon instance Homebrew Mvim était configurée pour utiliser filetype = dos. Apporté le changement requis dans .vimrc ....
la source
essayez
:%s/\^M//
au moins cela a fonctionné pour moi.la source