web-dev-qa-db-fra.com

Que signifie le caractère ^ M dans Vim?

Je continue à avoir le caractère ^M dans mon vimrc et ma configuration est brisée.

460
Max

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 est la façon dont vim affiche 0xD (0x0D = 13, M est la 13ème lettre de l'alphabet anglais).

Vous pouvez supprimer tous les caractères ^M en exécutant ce qui suit:

:%s/^M//g

^M est entré en maintenant enfoncée Ctrl et en tapant v suivi par m, puis relâchant 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). J'utilise ceci pour me débarrasser de ^M dans les fichiers copiés de Windows vers Unix (Solaris, Linux, OSX).

518
Tomasz Stanczak
:%s/\r//g 

travaillé pour moi aujourd'hui. Mais ma situation peut avoir été légèrement différente.

128
dlk5730

Pour traduire la nouvelle ligne au lieu de la supprimer:

:%s/\r/\r/g
62
Mori

Cela signifie probablement que vous avez des retours à la ligne (différents systèmes d'exploitation utilisent différentes manières de signaler la fin de la ligne).

Utilisez dos2unix pour réparer les fichiers ou définir les formats de fichier dans vim:

set ffs=unix,dos
36
cnicutar

Supposons que votre fichier texte est - fichier.txt, puis exécutez cette commande -

dos2unix file.txt 

Il convertit le fichier texte du format dos au format unix.

16
akritaag

Sous Unix, il est probablement plus facile d'utiliser la commande 'tr'.

cat file1.txt | tr "\r" "\n" > file2.txt
8
Irving Rabin

Je les ai tous enlevés avec sed:

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

Pourrait également être remplacé par une autre chaîne ou un autre caractère:

sed -i -e 's/\r/string/g'

7
Freedom_Ben

J'ai reçu un fichier texte initialement créé sur une machine Windows par un utilisateur Mac et je devais l'importer dans une base de données Linux MySQL à l'aide de la commande load data.

Bien que VIM ait affiché le caractère '^ M', rien de ce qui précède n'a fonctionné pour mon problème particulier, les données seraient importées mais étaient toujours corrompues d'une manière ou d'une autre. La solution a été assez facile à la fin (après beaucoup de frustration).

Solution: Exécuter dos2unixDEUX FOIS sur le même fichier a fait l'affaire! Utiliser la commande file 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 importée parfaitement dans la base de données.

5
Anthony Palmer

Vous pouvez corriger cela dans vim en utilisant

:1,$s/^V^M//g

où ^ est le caractère de contrôle.

4
Scott C Wilson

C'est la seule chose qui a fonctionné dans mon cas:

:e ++ff=dos

:wq

3
Sardeep Lakhera

Si la configuration est interrompue et que les caractères ^ M sont obligatoires dans les mappages, vous pouvez simplement remplacer les caractères ^ M par <Enter> ou même <C-m> (tous deux tapés sous forme de simples séquences de caractères, donc 7 et 5 caractères). , respectivement).

C’est la seule méthode portable recommandée pour stocker des codes spéciaux dans les mappages.

2
sehe

Sous FreeBSD, vous pouvez effacer le ^M manuellement en tapant ce qui suit:

:%s/ Ctrl+V, puis Ctrl+M, puis Ctrl+M encore.

2
Victor Ong

Si vous n'avez pas spécifié intentionnellement une autre variable fileformat (par exemple, :e ++ff=unix pour un fichier Windows), il est probable que le fichier cible contient des EOL mixtes.

Par exemple, si un fichier contient des lignes avec les terminaisons <CR><NL> et les autres avec les terminaisons <NL> et que fileformat est défini sur unix automatiquement par Vim lors de sa lecture, ^M (<CR>) apparaîtra. Dans ce cas, fileformats entre en jeu. Voir :help ffs pour les détails.

1
ebk

J'ai découvert que je polluais des fichiers depuis des semaines parce que mon instance de Homebrew Mvim était configurée pour utiliser filetype = dos. Fait le changement requis dans .vimrc ....

0
nichg

essayez :%s/\^M// Au moins, cela a fonctionné pour moi.

0
xuc