Comment convertir le ^M saut de ligne à la "normale" saut de ligne dans un fichier ouvert dans vim?
vim montre à chaque fin de ligne ^M
Comment je fais pour remplacer ce dernier par un "normal" saut de ligne?
- double possible de Convertir DOS des fins de ligne pour Linux fins de ligne dans vim
- Veuillez modifier la solution de la fileformat modifier parce que c'est le plus propre solution.
- Je sais que cette question est à propos de vim, mais d'autres recherches sur Google à la terre dans ce fil. Donc, si vous avez Eclipse installé sur votre système, vous pouvez convertir le séparateur de ligne, soit un seul fichier ou une arborescence de dossiers de fichiers en quelques clics: stackoverflow.com/a/7019737/1364747
Vous devez vous connecter pour publier un commentaire.
C'est la seule chose qui a fonctionné pour moi:
Trouvé à: http://vim.wikia.com/wiki/File_format
:e ++ff=dos
suivie par:set ff=unix
va convertir les terminaisons à une saine format.Commande
Où
<Ctrl-V><Ctrl-M>
moyens de type Ctrl+V, puis Ctrl+M.Explication
substitut, % = toutes les lignes
^M caractères (Ctrl-V est un Vim façon d'écrire l'Ctrl caractère ^ et Ctrl-M écrit le M après l'expression régulière, résultant de ^M caractère spécial)
avec une nouvelle ligne (
\r
)Et de le faire de par le monde (pas seulement la première occurrence sur la ligne).
E486: Pattern not found: <Ctrl-V><Ctrl-M>
:%s/<Ctrl-V><Ctrl-M>/\r/g
(où \r remplace le ^M avec un saut de ligne).^M
mais il a trouvé^M$
!?!? exemple::%s/^M$//g
a fonctionné pour moi:%s/<Ctrl-V><Ctrl-M>/g
. Aussi je trouve que/g
n'est pas nécessaire(gvim, windows):%s/<Ctrl-V><Ctrl-M>//g
:e ++ff=dos
Sur Linux et Mac OS, les ouvrages suivants,
où
^V^M
moyens de type Ctrl+V, puis Ctrl+M.Remarque: sous Windows, vous voudrez probablement utiliser
^Q
au lieu de^V
, puisque par défaut^V
est mappé à coller du texte.E486: Pattern not found: ^V^M
.^M
's, mais il ajoute également une nouvelle ligne de plus. Ce que je veux, c'est:%s/^V^M//g
, mais c'est ni ici, pas là, puisque je n'ai pas posé la question.git diff
mais pas dans Vim en raison de la conversion lorsque le fichier est ouvert. J'ai eu à utiliser Jonathan Leffler réponse en combinaison avec la vôtre, et LeopardSkinPillBoxHat de se disputer les différents fichiers. Peut-être que je devrais avoir posé une nouvelle question, mais la dernière fois que je l'ai fait pour une légère variation m'a dit que c'était un dupe!vim
mais j'ai tapé: bonjour^V^Mhow^V^Mare^V^Myou^V^M[retour]bonjour^V^M[retour]comment^V^M[retour]sont des^V^M[retour]vous^V^M[esc] (où [retour] est de frapper la touche retour/entrée et [esc] est la touche echap). Avant l'exécution de la commande le fichier a 5 lignes, la première avec "bonjour^Mhow^Mare^Myou^M", les quatre avec un mot est suivi par "^M". Après ":%s/^V^M/^V^M/g" il y a 13 lignes, 1 mot par ligne, sauf les lignes vides dans les lignes 5,7,9,11 & 13 (sur un mac). Essayez-la.1660 substitutions on 1 line
et le fichier a maintenant 1661 lignes. Yay!!!%s/\r/\r/g
bien travaillé sur MacVim pour un fichier montrant seulement^M
à la fin de lignes (une longue ligne dans MacVim termes). Clairement \r signifie des choses différentes dans le modèle vs les 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 écrit sans retour chariot (CR, ^M) caractères.
set ff=unix
comme un raccourci peu de la même manièreft
est un raccourci pourfiletype
Un fichier que j'avais créé avec BBEdit vu dans MacVim affichait un tas de
^M
ligne renvoie plutôt régulières. La chaîne suivante de remplacer le problème est réglé - espérons que cela aide:C'est intéressant parce que je suis de remplacer les sauts de ligne avec le même caractère, mais je suppose que Vim a juste besoin d'obtenir une nouvelle \r pour afficher correctement. Je serais intéressé de connaître les mécanismes sous-jacents de ce fonctionnement.
\r
caractères avec\n
malgré la spécification\r
que le remplacement. Ne pas se plaindre, c'est exactement ce que je voulais. Juste bizarre.:%s/\r//g
a travaillé pour moi dans windows gVimTout d'abord, utilisez
:set ff?
de comprendre le format de fichier de votre fichier.Je suppose que cela pourrait être
unix
, puis le problème, c'est que votre fichier a été créé avecfileformat=dos
ajoutant "^M^J" à l'extrémité de la ligne, mais le lire avecflieformat=unix
seulement enlever la "^J" à partir de l'extrémité de la ligne, laissant le "^M" il.Juste à l'entrée
:e ++ff=dos
dans Vim ligne de commande pour modifier votre fichier au format unix au dos. Il devrait résoudre le problème. Si non,:%s/\r//g
devraient vous aider.:e ++ff=dos
puis:set ff=unix
et:w
afin d'obtenir le ^M caractère de match que j'ai eu pour sélectionner visuellement et ensuite utiliser le système d'exploitation copier dans le presse-papiers de commande pour le récupérer. Vous pouvez la tester en faisant une recherche pour le personnage avant d'essayer la commande de remplacement.
faut choisir la première ligne de mauvaise qualité
va remplacer tous les errants ^M avec des retours chariot.
C'est que les fonctions dans MacVim, qui est basé sur gvim 7.
EDIT:
Avoir ce problème sur mon Windows 10 machine, qui a Ubuntu pour Windows, et je pense que c'est à l'origine de fileformat questions pour vim. Dans ce cas, la modification de la ff pour unix, mac, ou de dos, n'a rien fait d'autre que de changer le ^M ^J et de retour à nouveau.
La solution dans ce cas:
La raison pour laquelle je suis allé cet itinéraire est parce que je voulais m'assurer que j'étais non-destructive avec mon dossier. Je pourrais avoir
:%s/\r$//g
mais à supprimer les retours à la ligne droite, et pourrait avoir eu des résultats inattendus. Au lieu de nous convertir au singulier caractère CR, ici un ^M personnage, un espace, puis supprimez tous les espaces en fin de ligne (qui pour moi est un résultat souhaitable, peu importe)Désolé pour relancer une vieille question qui a depuis longtemps été répondu, mais il semble y avoir une certaine confusion à pied et j'ai pensé que je voudrais vous aider à effacer certains de que depuis ce qui est à venir haut dans les recherches google.
Aucun de ces fonctionné pour moi, j'ai donc essayé ce, qui a travaillé:
type
:%s/
appuyez sur CTRL-VCTRL-M
type
//g
appuyez sur Entrée
Donc l'ensemble de la commande Vim devrait ressembler à
:%s/^M//g
Ce que cela fait:
:%s
(rechercher et remplacer)/^M/
(symbole)/
(pas de caractères)g
(dans le monde).Sans avoir à utiliser la touche Ctrl:
:%s/\r$//
Chose Simple qui a fonctionné pour moi
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 BSDsed
alors (que l'on trouve sur OSX). Toute personne fixation des retours à la ligne (qui est probablement travailler avec un mélange de systèmes d'exploitation, il est donc utile d'être clair à ce sujet lorsque la réponse sera travail.^M est récupéré par Ctrl+V et M, afin de ne
Ce sujet justement:
:%s/\r//g
Qui a totalement fonctionné pour moi.
Ce que cela fait, c'est juste pour nettoyer l'extrémité de la ligne de toutes les lignes, il supprime le ^M et c'est tout.
Ctrl+M réduit ma fenêtre, mais Ctrl+Entrée en fait, insère un
^M
caractère. J'ai également eu à être sûr de ne pas soulever le Ctrl clé entre les presses.Donc la solution pour moi a été:
Où
<Ctrl-V><Ctrl-Enter>
moyens de appuyez et maintenez Ctrl, appuyez sur et relâchez V, appuyez sur et relâchez Entrée, puis relâchez Ctrl.Si vous travaillez sur un ordinateur Windows-fichier généré
La solution ci-dessus va ajouter une ligne supplémentaire entre les lignes, parce qu'il existe déjà un invisible
\r
après la^M
.Pour éviter cela, vous voulez supprimer la
^M
caractères sans les remplacer.Où
%
signifie "dans ce tampon,"s
signifie "substitut"/
moyens "(trouver) le schéma suivant,"<Ctrl-V><Ctrl-Enter>
référence aux touches à presser pour obtenir le^M
caractère (voir ci-dessus),//
signifie "rien" (ou, "avec le motif entre ces deux barres obliques, qui est vide"), etg
est un drapeau sens "au niveau mondial", par opposition à la première occurrence dans une ligne.Il existe de nombreuses autres réponses à cette question, mais encore, le suivant qui fonctionne le mieux pour moi, car j'avais besoin d'une ligne de commande solution:
Explication:
myfile
:e ++ff=dos
forcer un rechargement de la totalité du fichier en tant que dos des fins de ligne.:w ++ff=unix
pour écrire le fichier à l'aide de fins de ligne unixCela a fonctionné pour moi:
\n
de fin de ligne)Donc dans vim:
Dans mon cas,
Rien au-dessus de travaillé, j'ai eu un fichier CSV copié sur machine Linux à partir de mon mac et j'ai utilisé toutes les commandes ci-dessus mais rien n'y fit, mais au-dessous d'un
J'ai eu un fichier dans lequel ^M caractères ont été sandwitched entre les lignes, quelque chose comme ci-dessous
Sinon, il y a open-source utilitaires appelé dos2unix et unix2dos qui font cette chose même. Sur un système linux, ils sont probablement installé par défaut; pour un système windows, vous pouvez les télécharger à partir de http://www.bastet.com/ entre autres.
où ^M est tapé en appuyant simultanément sur les 3 touches, ctrl + v + m
utilisation dos2unix utilitaire si le fichier a été créé sur windows,
utilisation mac2unix utilitaire si le fichier a été créé sur mac. 🙂
Cela a fonctionné pour moi:
À enregistrer les frappes de touches, vous pouvez éviter de taper Ctrl+VCtrl+M de la placer dans une cartographie. Il suffit d'ouvrir un fichier contenant un ^M personnage, de le tirer et de le coller dans une ligne comme ceci dans votre .vimrc:
Aucune de ces suggestions ont été travaillant pour moi d'avoir réussi à obtenir une charge de
^M
les sauts de ligne tout en travaillant à la fois avec vim et eclipse. Je soupçonne que j'ai rencontré un en dehors de cas, mais dans le cas où il aide à quelqu'un je n'ai.Et réglé mon problème
Si vous tapez
^M
à l'aide deShift+6 Caps+M
il n'accepte pas.Vous devez taper
ctrl+v ctrl+m
.^M
donne indésirables les sauts de ligne. Pour gérer cela, nous pouvons utiliser lesed
commande comme suit:Juste enlever
set binary
dans votre .vimrc!Utiliser l'une de ces commandes:
Ou
" Cette fonction préserve la liste des sauts
J'ai passé un après-midi aux prises avec \n ctrl-v 012 (tous les deux de me fournir la valeur null). & travaillé par le biais de ce thread jusqu'à ce que j'ai atteint metagrapher de l'.
\r
a bien fonctionné pour moi!fait quelque chose comme ceci:
en quelque chose comme ceci:
De la magie. Je suis profondément reconnaissant
Ou au lieu d'utiliser vim, vous pouvez simplement fixer les sauts de ligne à l'aide de cette commande
Espère que cela aide!
Aucun des ci-dessus a fonctionné pour moi. (substitution sur \r, ^M, ctrl-v ctrl-m )
J'ai utilisé copier et coller pour coller mon texte dans un nouveau fichier.
Si vous avez des macros qui interfèrent, vous pouvez essayer de
:set paste
avant l'opération de collage et:set nopaste
après.Sur une console série tous les vi et sed solutions ne fonctionne pas pour moi. J'ai dû:
À utiliser
sed
sur MacOS, ce faire:Explication: La
$'STRING'
syntaxe ici concernent le shell bash. Mac n'est pas de traiter\r
comme caractère spécial. En citant la chaîne de commande dans$''
vous dites à la coque afin de remplacer\r
avec le réel\r
caractère spécifié dans la norme ANSI-C standard.Dans vim, utilisez la commande:
Où vous souhaitez rechercher et remplacer:
en
et la
est mondiale
Noter que c'est la même que la réponse de @ContextSwitch mais avec le global drapeau
Lorsque dans windows, essayez
:%s/<C-Q><C-M>/g
<C-v>
est remplacer par<C-q>
parce que par défaut le premier est mappé pour coller le texte.:%s/<C-Q><C-M>/g
va changer "0d0d0a" à "0d0a" (0d0a moyen \n\r). Je ne sais pas pourquoi, mais ça fonctionne vraiment de cette façon (0d0d0a→0d0a c'est à dire ^M→\n\r) dans mon windows7 OS.