Ciągle otrzymuję ^M
postać w moim vimrc i to psuje moją konfigurację.
:digraphs
w vimie pokazuje tabelę digraph, z którą łączy się @LightnessRacesinOrbit.
preg_replace('/[\x01]/', ' ' ,$str);
Nadzieję, że to pomaga.
Ciągle otrzymuję ^M
postać w moim vimrc i to psuje moją konfigurację.
:digraphs
w vimie pokazuje tabelę digraph, z którą łączy się @LightnessRacesinOrbit.
preg_replace('/[\x01]/', ' ' ,$str);
Nadzieję, że to pomaga.
Odpowiedzi:
Unix używa 0xA do znaku nowej linii. System Windows używa kombinacji dwóch znaków: 0xD 0xA. 0xD jest znakiem powrotu karetki. ^M
tak się składa, że vim wyświetla 0xD (0x0D = 13, M jest 13. literą alfabetu angielskiego).
Możesz usunąć wszystkie ^M
znaki, wykonując następujące czynności:
:%s/^M//g
Gdzie wpisuje się , ^M
przytrzymując Ctrli wpisując , a następnie, a następnie zwalniając . Czasami jest to skracane jako , ale pamiętaj, że musisz wpisać go tak, jak opisano w poprzednim zdaniu, zamiast wpisywać go dosłownie.vmCtrl^V^M
Wyrażenie to zastąpi wszystkie wystąpienia ^M
pustym łańcuchem (tzn. Niczym). Używam tego, aby pozbyć się ^M
plików skopiowanych z Windowsa na Unixa (Solaris, Linux, OSX).
^M
znak, jeśli plik ma niedopasowane zakończenia linii. Użyj polecenia dostarczonego przez Tomasza, a następnie wpisz w :fileformat={unix|dos|mac}
zależności od systemu operacyjnego, na który celujesz. Jeśli jest tylko kilka linii bez ^M
znaku, prawdopodobnie chcesz :fileformat=dos
. Jeśli edytujesz pliki w edytorze innym niż vim, upewnij się, że jest skonfigurowany tak, aby pasował do końców linii (Notepad tego nie zrobi, ale zrobi to dowolny renomowany edytor, taki jak Notepad ++ lub TextMate).
vi
, że to polecenie należy wpisać ręcznie. Samo wklejenie go do otwartego terminalu z vi
uruchomionym spowoduje błąd „wzorzec nie znaleziony”.
:%s/\r//g
aby zastąpić zwroty karetki w moim pliku.
:%s/\r//g
pracował dla mnie dzisiaj. Ale moja sytuacja mogła być nieco inna.
:%s/\r//
wystarczyłoby.
Aby przetłumaczyć nowy wiersz zamiast go usunąć:
:%s/\r/\r/g
\r
ma inne zachowanie w części wyszukiwania niż w części zastępującej. Zobacz na przykład stackoverflow.com/a/3834303 .
:%s/\r//g
Mam plik tekstowy wygenerowany pierwotnie na komputerze z systemem Windows przez użytkownika komputera Mac i musiałem zaimportować go do Linux MySQL DB za pomocą load data
polecenia.
Chociaż VIM wyświetlał znak „^ M”, żadne z powyższych nie działało w przypadku mojego konkretnego problemu, dane były importowane, ale zawsze były w jakiś sposób uszkodzone. Rozwiązanie było dość łatwe (po frustracji).
Rozwiązanie: Wykonanie dos2unix
DWUKROTNIE na tym samym pliku załatwiło sprawę ! Używającfile
polecenia pokazuje, co dzieje się po drodze.
$ 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
Ostateczna wersja pliku została idealnie zaimportowana do bazy danych.
W Uniksie prawdopodobnie łatwiej jest użyć polecenia „tr”.
cat file1.txt | tr "\r" "\n" > file2.txt
Usunąłem je wszystkie za pomocą sed:
sed -i -e 's/\r//g' <filename>
Można również zastąpić innym ciągiem lub znakiem:
sed -i -e 's/\r/string/g' <filename>
Te sed
polecenia działają w wersji GNU / Linux, sed
ale mogą wymagać ulepszenia w BSD (w tym macOS).
Możesz to naprawić w vimie za pomocą
:1,$s/^V^M//g
gdzie ^ jest znakiem kontrolnym.
^M
jest.
To jedyna rzecz, która zadziałała w moim przypadku:
:e ++ff=dos
:wq
Jeśli psuje konfigurację, a znaki ^ M są wymagane w odwzorowaniach, możesz po prostu zamienić znaki ^ M na, <Enter>
a nawet <C-m>
(oba wpisane jako proste sekwencje znaków, odpowiednio odpowiednio 7 i 5 znaków).
Jest to jeden zalecany, przenośny sposób przechowywania specjalnych kodów w mapowaniach
W FreeBSD możesz wyczyścić ^M
ręcznie, wpisując następujące polecenie:
:%s/
Ctrl+ V, następnie Ctrl+ M, a następnie Ctrl+ Mponownie.
Jeśli nie określiłeś inaczej fileformat
celowo (powiedz:e ++ff=unix
dla pliku Windows), prawdopodobnie plik docelowy ma mieszane EOL.
Na przykład, jeśli plik zawiera niektóre linie z <CR><NL>
zakończeniami, a inne z
<NL>
zakończeniami, a Vim automatycznie fileformat
ustawi unix
go podczas czytania, ^M (<CR>)
pojawi się. W takich przypadkach fileformats
wchodzi w grę. Zobacz :help ffs
szczegóły.