2009-04-28 4 views
74

J'utilise gVim sous Windows. Mon code montre ^M caractères à la fin des lignes. J'ai utilisé :set ff=dos en vain. Les caractères ^M restent pour les lignes existantes, mais n'apparaissent pas pour les nouvelles lignes que j'entre. J'ai changé les modes à mac (montre ^J caractères) et unix (montre également ^M caractères) et dos à dos. Quelqu'un d'autre a-t-il vu cela?gVim indiquant le retour chariot (^ M) même lorsque le mode fichier est explicitement DOS

+0

Voir http://vim.wikia.com/wiki/File_format pour une explication complète des fins de ligne dans vim/gvim. Ce lien explique également comment résoudre le problème. – axiopisty

Répondre

133

Cela se produit lorsque vous avez un mélange de terminaisons de ligne Windows et Unix. Si vous avez 100 lignes, 99 sont \ r \ n et un est \ n, vous verrez 99^M caractères. La solution est de trouver cette ligne et de la remplacer. Ou exécutez dos2unix sur le fichier. Vous pouvez remplacer les fins de ligne Windows avec:

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

+0

J'ai trouvé cette ligne juste avant d'écrire ceci. :) Merci! – Jerph

+1

Heh, typique. Vim est génial, alors restez avec! :-) – richq

+2

Je souhaite que je pourrais vous donner +1000 pour ce – espais

19

J'utilise habituellement ce qui suit pour le nettoyage de mes fins de ligne:

:g/^M$/s/// 

Pour obtenir le ctrl-M type I habituellement ctrl-Q, puis ctrl-M et il le met dedans. (Dans certains environnements, il peut être ctrl-V, puis ctrl-M.) Je ne sais pas pourquoi, mais je trouve cela plus facile à retenir que rq.

N'oubliez pas de faire également :set ff=dos, sinon vous finirez par enregistrer avec les fins de ligne UNIX.

+0

Oui, normalement utilisez la version^M avec Ctrl-Q et tout ça. Mais c'est plus difficile à expliquer ;-) et la version de match de groupe est copiable. – richq

14

Je sais que cela a déjà répondu, mais un truc que je l'utilise est

:%s/\r/\r/g 

Cela remplace les retours chariot unix avec les fenêtres CRLF. Juste ajouté au cas où quelqu'un d'autre avait des problèmes.

+0

cela fonctionne très bien !! – Gordon

4

En fait, ce qui a fonctionné pour moi (sur Windows 64 bits, gVim: 7.2) est:

:set ffs=dos 

pas seulement: ff

4

éxécution de vim 7.3 sur Windows 7. J'ai utilisé les éléments suivants commande:

:%s/^M/\r/g 

Pour créer le^MI tapé dans CTRL + Q, puis CTRL + M.

40

Vous pouvez également exécuter:

:e ++ff=dos 

Pour retirer la ^M: Voir File format – Vim Tips Wiki.

+1

merci, c'est nouveau pour moi – Jerph

+0

Fonctionne grand merci! – volting

+4

C'était ce que je cherchais, et c'est la bonne réponse. Merci. –

2

Ceci est probablement un peu simple pour beaucoup d'entre vous mais au hasard, c'est utile.

Basé sur la réponse de richq, je les ai trouvés utiles dans mon vimrc. Notez que le second est commenté normalement car cela rend dd un peu déroutant puisque Vim attendra un autre coup de clé pour fonctionner si c'est la commande ex mappée.

 
function! D2u() 
    execute '%s/\r\(\n\)/\1/g' 
endfunction 
"map d2u :%s/\r\(\n\)/\1/g 

Le premier est exécuté en entrant dans call D2u() ex et la seconde en appuyant sur D2u en mode édition.

6

Vous pouvez ignorer ces caractères!

mettre ceci dans votre vimrc

correspondance Ignorer/\ r $/

+1

Bon à savoir c'est là, mais existe-t-il un bon cas d'utilisation pour laisser des fins de ligne incompatibles dans un fichier? On dirait que c'est demander des ennuis. – Jerph

+1

Ceci est plus ce dont j'avais besoin (changer le fichier n'est pas toujours conseillé quand il provoque des changements massifs dans un fichier apparaissant dans certains systèmes de contrôle de révision) – RunHolt

+0

Malheureusement, cela change les fins de ligne dès que vous enregistrez le fichier. Donc, il produit exactement ces grands changements indésirables dans les espaces, seulement sans vous montrer. Au moins pour moi. :( –

2

Ce sont des terminaisons supplémentaires de ligne CR généralement en raison d'un aide d'un fichier sur les systèmes mixtes UNIX/DOS.

possible réponse la plus courte pour enlever un seul^M de la fin de chaque ligne, et ce que je l'utilise, est:

:%s/\r 

qui équivaut à:

:%s/\r// 

mais la fin les barres obliques ne sont pas obligatoires (elles sont supposées).

0

essayé beaucoup de choses, mais ce qui suit travaillé

:%s/\r/\r/g 

Note: L'utilisation g si vous voulez que l'effet sur le fichier entier

Questions connexes