Je continue à avoir du ^M
caractère dans mon vimrc et ça casse ma configuration.
:digraphs
dans vim montre la table de digrammes à laquelle @LightnessRacesinOrbit est lié.
preg_replace('/[\x01]/', ' ' ,$str);
cela vous aidera.
Je continue à avoir du ^M
caractère dans mon vimrc et ça casse ma configuration.
: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:
:%s/^M//g
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).
^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 en vi
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 dans
:%s/\r//g
a travaillé pour moi aujourd'hui. Mais ma situation a peut-être été légèrement différente.
:%s/\r//
suffirait.
Pour traduire la nouvelle ligne au lieu de la supprimer:
:%s/\r/\r/g
\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/\r//g
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 la file
commande 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.
Sous Unix, il est probablement plus facile d'utiliser la commande «tr».
cat file1.txt | tr "\r" "\n" > file2.txt
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 de sed
mais peuvent nécessiter des ajustements sur les BSD (y compris macOS).
Vous pouvez résoudre ce problème dans vim en utilisant
:1,$s/^V^M//g
où ^ est le caractère de contrôle.
^M
est.
C'est la seule chose qui a fonctionné dans mon cas:
:e ++ff=dos
:wq
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.
Dans FreeBSD, vous pouvez effacer ^M
manuellement en tapant ce qui suit:
:%s/
Ctrl+ V, Puis Ctrl+ M, puis Ctrl+ à Mnouveau.
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, et fileformat
est défini unix
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.