vim zeigt auf jeder Zeile mit der Endung ^ M
Wie kann ich dies durch einen "normalen" Zeilenumbruch ersetzen?
Dies ist das einzige, was für mich funktioniert hat:
: e ++ ff = dos
Fand es unter: http://vim.wikia.com/wiki/File_format
:%s/<Ctrl-V><Ctrl-M>/\r/g
Wobei <Ctrl-V><Ctrl-M>
Typ bedeutet Ctrl+V dann Ctrl+M.
:%s
ersatz,% = alle Zeilen
<Ctrl-V><Ctrl-M>
^ M-Zeichen (Strg-V ist eine Vim-Schreibweise für das Zeichen Strg ^, und Strg-M schreibt das M nach dem regulären Ausdruck, was zu dem Sonderzeichen ^ M führt.)
/\r/
mit neuer Zeile (\r
)
g
Und zwar global (nicht nur beim ersten Auftreten in der Leitung).
Unter Linux und Mac OS funktioniert Folgendes:
:%s/^V^M/^V^M/g
wobei ^V^M
Typ bedeutet Ctrl+V, dann Ctrl+M.
Hinweis: Unter Windows möchten Sie wahrscheinlich ^Q
anstelle von ^V
verwenden, da ^V
standardmäßig zum Einfügen von Text zugeordnet ist.
Sehen Sie sich in vim
das Dateiformat an - DOS oder Unix:
:set filetype=unix
:set fileformat=unix
Die Datei wird ohne Wagenrücklaufzeichen (CR, ^ M) zurückgeschrieben.
Eine Datei, die ich mit BBEdit in MacVim erstellt hatte, zeigte eine Reihe von ^M
-Zeilenrückgaben anstelle von regulären. Die folgende Zeichenfolge ersetzt das Problem - hoffe das hilft:
:%s/\r/\r/g
Es ist interessant, weil ich Zeilenumbrüche durch dasselbe Zeichen ersetze, aber ich denke, dass Vim nur ein frisches\r benötigt, um korrekt angezeigt zu werden. Ich würde gerne wissen, warum es so funktioniert.
Verwenden Sie zunächst :set ff?
, um das Dateiformat Ihrer Datei zu ermitteln.
Ich denke, es könnte unix
sein, dann liegt das Problem darin, dass Ihre Datei mit fileformat=dos
erstellt wurde, wobei "^ M ^ J" am Zeilenende hinzugefügt wurde. Lesen Sie jedoch mit flieformat=unix
, wobei nur "^ J" vom Zeilenende entfernt wird. Dort.
Geben Sie einfach :e ++ff=dos
in die Vim-Befehlszeile ein, um das Format Ihrer Datei von Unix in DOS zu ändern. Es sollte das Problem lösen. Wenn nicht, sollte :%s/\r//g
Ihnen helfen.
damit das ^ M-Zeichen übereinstimmt, musste ich es visuell auswählen und dann den Befehl OS in die Zwischenablage kopieren verwenden, um es abzurufen. Sie können es testen, indem Sie nach dem Zeichen suchen, bevor Sie den Befehl zum Ersetzen ausführen.
/^M
sollte die erste fehlerhafte Zeile auswählen
:%s/^M/\r/g
ersetzt alle fehlerhaften ^ M durch Wagenrücklauf.
Dies ist eine Funktion in MacVim, die auf gvim 7 basiert.
EDIT:
Ich habe dieses Problem erneut auf meinem Windows 10-Computer, auf dem Ubuntu für Windows installiert ist, und ich denke, das verursacht Dateiformatprobleme für vim. In diesem Fall hat das Ändern von ff in Unix, Mac oder DOS nichts anderes getan, als ^ M in ^ J und wieder zurück zu ändern.
Die Lösung in diesem Fall:
:%s/\r$/ /g
:%s/ $//g
Der Grund, warum ich diesen Weg gegangen bin, ist, weil ich sicherstellen wollte, dass meine Datei nicht zerstörerisch ist. Ich könnte :%s/\r$//g
haben, aber das hätte die Wagenrückläufe gelöscht und unerwartete Ergebnisse gehabt. Stattdessen konvertieren wir das einzelne CR-Zeichen, hier ein ^ M-Zeichen, in ein Leerzeichen und entfernen dann alle Leerzeichen am Zeilenende (was für mich trotzdem ein wünschenswertes Ergebnis ist).
Es tut mir leid, dass Sie eine alte Frage wiederbelebt haben, die längst beantwortet wurde, aber es schien einige Verwirrung zu geben, und ich dachte, ich würde helfen, einiges davon zu klären, da dies bei der Google-Suche hoch ist.
Keines davon hat bei mir funktioniert, also habe ich es versucht, was funktioniert hat:
typ :%s/
drücken Sie CTRL-VCTRL-M
typ //g
drücken Sie Enter
Der gesamte Befehl in Vim sollte also wie folgt aussehen: :%s/^M//g
Was dies bewirkt: :%s
(suchen und ersetzen) /^M/
(dieses Symbol) /
(ohne Zeichen) g
(global).
Ohne dass Sie Strg: .__ verwenden müssen. :%s/\r$//
Einfache Sache, die für mich funktioniert hat
dos2unix filename
Ich habe das mit sed gemacht:
sed -i -e 's/\r/\n/g' filename
^ M wird abgerufen von Ctrl+V und M, dann mach's
s/^M//g
Was ist mit nur:
:%s/\r//g
Das hat für mich total funktioniert.
Was dies tut, ist nur das Zeilenende von allen Zeilen zu säubern, das ^ M zu entfernen und das ist es.
Es gibt viele andere Antworten auf diese Frage, aber am besten funktionieren für mich die folgenden, da ich eine Befehlszeilenlösung benötigte:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
Erläuterung:
myfile
, ohne irgendwelche .vimrc-Dateien zu laden.:e ++ff=dos
aus, um das erneute Laden der gesamten Datei als Doszeilenende zu erzwingen.:w ++ff=unix
aus, um die Datei mit Unix-Zeilenenden zu schreibenCtrl+M minimiert mein Fenster, aber Ctrl+Enter Fügt tatsächlich ein ^M
-Zeichen ein. Ich musste auch sicher sein, das nicht abzuheben Ctrl Taste zwischen den Drücken.
Die Lösung für mich war also:
:%s/<Ctrl-V><Ctrl-Enter>/\r/g
Wobei <Ctrl-V><Ctrl-Enter>
bedeutet gedrückt halten Ctrl, Drücken und Loslassen V, Drücken und Loslassen Enter, nd dann loslassen Ctrl.
Die obige Lösung fügt eine zusätzliche Zeile zwischen vorhandenen Zeilen hinzu, da nach dem \r
bereits ein unsichtbarer ^M
vorhanden ist.
Um dies zu verhindern, möchten Sie die Zeichen ^M
löschen, ohne sie zu ersetzen.
:%s/<Ctrl-V><Ctrl-Enter>//g
Wo %
"in diesem Puffer" bedeutet, s
"Ersatz" bedeutet, /
"(finde) das folgende Muster," <Ctrl-V><Ctrl-Enter>
bezieht sich auf die Tasten, die gedrückt werden müssen, um das Zeichen ^M
zu erhalten (siehe oben), //
bedeutet "mit nichts" ( oder "mit dem Muster zwischen diesen beiden Schrägstrichen, das leer ist") und g
ist ein Flag was "global" bedeutet, im Gegensatz zum ersten Vorkommen in einer Zeile.
In meinem Fall,
Nichts oben hat funktioniert, ich hatte eine CSV-Datei von meinem Mac auf einen Linux-Rechner kopiert und ich habe alle oben genannten Befehle verwendet, aber nichts half als das Folgende
tr "\015" "\n" < inputfile > outputfile
Ich hatte eine Datei, in der ^ M Zeichen zwischen den Zeilen etwa wie unten sandwitched waren
Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,
Das hat für mich funktioniert:
\n
Zeilenende)Also in vim:
:set ff=unix
:w
Alternativ gibt es Open-Source-Dienstprogramme mit den Namen dos2unix und unix2dos, die genau dies tun. Auf einem Linux-System werden sie wahrscheinlich standardmäßig installiert. Für ein Windows-System können Sie sie unter anderem von http://www.bastet.com/ herunterladen.
sed s/^M//g file1.txt > file2.txt
wobei ^ M durch gleichzeitiges Drücken der 3 Tasten eingegeben wird, ctrl + v + m
verwenden Sie das Dienstprogramm dos2unix, wenn die Datei unter Windows erstellt wurde.... Verwenden Sie das Dienstprogramm mac2unix, wenn die Datei auf einem Mac erstellt wurde. :)
Das hat für mich funktioniert:
:% s/\r\n/\r
Ich weiß, dass dies vielleicht zu alt ist, aber ich hoffe, dass jemand dies nützlich finden kann.
Verwenden Sie einen dieser Befehle:
:%s/\r//g
Oder
:%s/\r\(\n\)/\1/g
Um Tastatureingaben speichern, können Sie die Eingabe vermeiden Ctrl+VCtrl+M indem Sie dies in einem Mapping platzieren. Öffnen Sie einfach eine Datei mit einem ^ M-Zeichen, ziehen Sie es heraus und fügen Sie es in eine Zeile in Ihrer .vimrc-Datei ein:
nnoremap <Leader>d :%s/^M//g<CR>
Entfernen Sie einfachset binary
in Ihrer .vimrc!
^M
gibt unerwünschte Zeilenumbrüche. Um dies zu handhaben, können wir den Befehl sed
wie folgt verwenden:
sed 's/\r//g'
Keiner dieser Vorschläge funktionierte für mich, da ich mit vim und Eclipse eine Menge von ^M
-Zeilenumbrüchen bekam. Ich habe den Verdacht, dass ich auf einen äußeren Fall gestoßen bin, aber falls es jemandem hilft, den ich tat.
:%s/.$//g
Und es hat mein Problem gelöst
:g/^M/s// /g
Wenn Sie ^M
mit Shift+6 Caps+M
eingeben, wird dies nicht akzeptiert.
Sie müssen ctrl+v ctrl+m
eingeben.
Über eine serielle Konsole funktionierten alle vi und sed-Lösungen für mich nicht. Ich musste:
cat inputfilename | tr -d '\r' > outputfilename
Keines der oben genannten Dinge funktionierte für mich. (Ersetzung auf\r, ^ M, Strg-v-Strg-m) Ich habe Kopieren und Einfügen verwendet, um meinen Text in eine neue Datei einzufügen.
Wenn Sie über störende Makros verfügen, können Sie :set paste
vor dem Einfügevorgang und :set nopaste
danach versuchen.
Anstatt vim zu verwenden, können Sie die Zeilenumbrüche einfach mit diesem Befehl korrigieren
fromdos <filename.txt>
Ich hoffe es hilft!
So verwenden Sie sed
unter MacOS:
sed -i.bak $'s/\r//' <filename>
Erläuterung: Die $'STRING'
-Syntax bezieht sich hier auf die Bash-Shell. Macs behandeln \r
nicht als Sonderzeichen. Indem Sie die Befehlszeichenfolge in $''
zitieren, fordern Sie die Shell auf, \r
durch das im ANSI-C-Standard angegebene \r
-Zeichen zu ersetzen.
"Diese Funktion behält die Liste der Sprünge bei
fun! Dos2unixFunction()
let [email protected]/
let l = line(".")
let c = col(".")
try
set ff=unix
w!
"%s/\%x0d$//e
catch /E32:/
echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
Verwenden Sie in vim den Befehl:
:% s/\ r\n/\ r/g
Wo möchten Sie suchen und ersetzen:
\ r\n
in
\ r
und das
/G
ist für global
Beachten Sie, dass dies dasselbe ist wie die Antwort von @ContextSwitch, jedoch mit dem globalen Flag
Ich habe einen Nachmittag lang mit\n Strg-v 012 zu kämpfen gehabt (beide liefern mir Null). & arbeitete durch diesen Thread, bis ich Metagrapher's erreichte.
\r
hat für mich gut funktioniert!
/),/s/),/)\r/g
drehte sich so etwas:
blacklist-Extra: i386 (0.4.1, 0.4.1 + nmu1), libmount1: i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1: i386 (2.20.1-5.1, 2.20.1-5.2) libapt-pkg4.12: i386 (0.9.7.4, 0.9.7.5), nmap: i386 (6.00-0.1, 6.00-0.2), libsane-common: i386 (1.0.22-7.3,
in so etwas:
26 libwv-1.2-4: i386 (1.2.9-3, automatisch)
27 openjdk-6-jre-headless: i386 (6b24-1.11.4-3, automatisch)
28 jed: i386 (0.99.19-2.1)
Zauber. Ich bin zutiefst dankbar