Kiedy otwieram plik vim
, widzę dziwne ^M
postacie.
Niestety, ulubiona wyszukiwarka na świecie nie radzi sobie dobrze ze znakami specjalnymi w zapytaniach, więc pytam tutaj:
Co to za
^M
postać?Jak mógł się tam dostać?
Jak się tego pozbyć?
vim
special-characters
Christoph Wurm
źródło
źródło
help digraph-table
.Odpowiedzi:
^M
To znak powrotu karetki. Jeśli to widzisz, prawdopodobnie patrzysz na plik, który powstał w świecie DOS / Windows, w którym koniec linii jest oznaczony przez parę powrotu karetki / nowej linii, podczas gdy w świecie Unixa koniec linii jest oznaczony jedną nową linią.Przeczytaj ten artykuł, aby uzyskać więcej szczegółów, a także wpis w Wikipedii dotyczący nowego wiersza .
W tym artykule opisano, jak skonfigurować vima do przezroczystej edycji plików za pomocą różnych znaczników końca linii.
Jeśli masz plik
^M
na końcu niektórych linii i chcesz się ich pozbyć, użyj tego w Vimie:(Naciśnij Ctrl+ V Ctrl+, Maby wstawić
^M
.)źródło
:%s/^M/\r/g
Zamiast tego spróbuj usunąć^M
i zastąpić^M
znakiem nowej linii\r
. Bez%
polecenia polecenie dotyczy tylko bieżącej linii. I natknąłem się na przykłady, w których^M
nie ma końca linii, takie jakThe first line.^MThe second line.
:%s/^M/
^M
jest używany w systemie UNIX\n
jest używany w Uniksie, co jest poprawne. To jest kod ASCII10
, znany również jako^J
.Większość systemów operacyjnych UNIX ma narzędzie o nazwie
dos2unix
, które konwertuje CRLF na LF. Pozostałe odpowiedzi obejmują pytanie „jakie są”.źródło
Prostszym sposobem na to jest użycie następującego polecenia:
To polecenie działa również z wzorcami ścieżek, np
Jeśli to nie działa, spróbuj użyć innego trybu:
-c
Ustaw tryb konwersji. Gdzie CONVMODE jest jednym z:ascii, 7bit, iso, mac
zascii
domyślnym.źródło
To zadziałało dla mnie
Komenda: e ++ ff = dos każe Vimowi ponownie odczytać plik, wymuszając format pliku dos. Vim usunie zakończenia linii tylko CRLF i LF, pozostawiając tylko tekst każdej linii w buforze.
następnie
i w końcu
źródło
ff
odnosi się do formatu pliku? Co++ff
?Innym sposobem na pozbycie się zwrotów karetki jest
tr
polecenie.Mam mały skrypt, który wygląda tak
źródło
Możesz to wyczyścić za pomocą
sed
:Sztuczka polega na tym, jak prawidłowo wprowadzić zwrot karetki. Ogólnie rzecz biorąc, musisz wpisać,
C-v C-m
aby wprowadzić literalny znak powrotu karetki. Możesz także mieć możliwość pracy w miejscuźródło
Co to jest ^ M?
^ M jest znakiem powrotu karetki. Jeśli to widzisz, prawdopodobnie patrzysz na plik, który powstał w świecie DOS / Windows, w którym koniec linii jest oznaczony przez parę powrotu karetki / nowej linii, podczas gdy w świecie Unixa koniec linii jest oznaczony jedną nową linią.
Jak mógł się tam dostać?
Gdy nastąpi zmiana formatu pliku.
Jak się tego pozbyć?
otwórz plik za pomocą
zapisz go za pomocą następującego polecenia
źródło
W moim przypadku,
Nic powyżej nie działało, miałem plik CSV skopiowany na maszynę z systemem Linux z mojego komputera Mac i użyłem wszystkich powyższych poleceń, ale nic nie pomogło poza tym poniżej
Miałem plik, w którym ^ M znaki były przełączane między wierszami coś w stylu poniżej
źródło
Możesz używać Vima w trybie Ex:
-b
tryb binarny%
wybierz wszystkie linies
zastąpić\r
powrót karetkix
Zapisz i zamknijźródło
Dodaj następujący wiersz do ~ / .vimrc
Następnie, gdy masz plik z zakończeniami linii systemu Windows, uruchom polecenie „: Tounix”.
źródło
W przeszłości widziałem, że nawet pliki konfiguracyjne nie są poprawnie analizowane i narzekają na białe znaki, ale jeśli wykonasz vi i ustawisz listę, to nie wyświetli białych znaków, nazwa pliku grep [[spacja]] pokaże ci ^ M
to wtedy
dos2unix file
pomagaźródło