Wpisanie :digraphsw vimie pokazuje tabelę digraph, z którą łączy się @LightnessRacesinOrbit.
askewchan
1
Próbując zastąpić tego rodzaju postać za pomocą php, wypróbuj tę preg_replace('/[\x01]/', ' ' ,$str); Nadzieję, że to pomaga.
Rachel Geller,
Odpowiedzi:
561
Unix używa 0xA do znaku nowej linii. System Windows używa kombinacji dwóch znaków: 0xD 0xA. 0xD jest znakiem powrotu karetki. ^Mtak się składa, że vim wyświetla 0xD (0x0D = 13, M jest 13. literą alfabetu angielskiego).
Możesz usunąć wszystkie ^Mznaki, wykonując następujące czynności:
:%s/^M//g
Gdzie wpisuje się , ^Mprzytrzymują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 ^Mpustym łańcuchem (tzn. Niczym). Używam tego, aby pozbyć się ^Mplików skopiowanych z Windowsa na Unixa (Solaris, Linux, OSX).
Na wszelki wypadek w systemie Windows Ctrl + V prawdopodobnie zostanie zmapowany do wklejenia. W takim przypadku domyślne ustawienia przypisują ponownie klawisz „specjalnego znaku ucieczki” do Ctrl + Q.
R. Martinho Fernandes
8
Prawdziwe pytanie brzmi: dlaczego Vim czasami automatycznie wykrywa zakończenia linii i wyświetla poprawnie, a czasem nie.
Scott
10
Zobaczysz ^Mznak, 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 ^Mznaku, 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).
Mikkel Paulson
9
Uwaga dla początkujących vi, że to polecenie należy wpisać ręcznie. Samo wklejenie go do otwartego terminalu z viuruchomionym spowoduje błąd „wzorzec nie znaleziony”.
IQAndreas
51
@bluesm Właściwie musiałem użyć, :%s/\r//gaby zastąpić zwroty karetki w moim pliku.
Wzorca
139
:%s/\r//g
pracował dla mnie dzisiaj. Ale moja sytuacja mogła być nieco inna.
opcja g nie jest wymagana, w linii jest tylko jedna nowa linia. :%s/\r//wystarczyłoby.
frogcoder,
7
Opcja g może być bardzo wymagana, ponieważ znak powrotu karetki niekoniecznie jest znakiem nowej linii. Po otwarciu w trybie uniksowym powrót karetki jest tylko kolejnym znakiem, a po otwarciu w trybie Windows powrót karetki jest wyjątkowy, a po nim następuje przejście do nowego wiersza.
Co to właściwie ma zrobić? Dla mnie wygląda na to, że zastępuje podobnego za podobnym, co, jak sądzę, nie zmieni niczego. Czy brakuje mi czegoś specjalnego w tym, jak działa składnia?
Platinum Azure,
16
@PlatinumAzure Nie wiem, dlaczego nikt nigdy nie pomyślał, aby odpowiedzieć na twoje pytanie. \rma inne zachowanie w części wyszukiwania niż w części zastępującej. Zobacz na przykład stackoverflow.com/a/3834303 .
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 datapolecenia.
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 dos2unixDWUKROTNIE 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.
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
Jeśli nie określiłeś inaczej fileformatcelowo (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 fileformatustawi unixgo podczas czytania, ^M (<CR>)pojawi się. W takich przypadkach fileformatswchodzi w grę. Zobacz :help ffsszczegóły.
Odkryłem, że od tygodni zanieczyszczam pliki ze względu na fakt, że moja instancja Homebrew Mvim była ustawiona na użycie filetype = dos. Wprowadzono wymaganą zmianę w .vimrc ....
: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: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).źródło
^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 zvi
uruchomionym spowoduje błąd „wzorzec nie znaleziony”.:%s/\r//g
aby zastąpić zwroty karetki w moim pliku.pracował dla mnie dzisiaj. Ale moja sytuacja mogła być nieco inna.
źródło
:%s/\r//
wystarczyłoby.Aby przetłumaczyć nowy wiersz zamiast go usunąć:
źródło
\r
ma inne zachowanie w części wyszukiwania niż w części zastępującej. Zobacz na przykład stackoverflow.com/a/3834303 .:%s/^V^M/^V^M/g
zobacz tutaj:%s/\r//g
Prawdopodobnie oznacza to, że masz znaki powrotu karetki (różne systemy operacyjne używają różnych sposobów sygnalizowania końca linii).
Użyj,
dos2unix
aby naprawić pliki lub ustawić formaty plików w vimie:źródło
Załóżmy, że Twój plik tekstowy to - plik.txt, a następnie uruchom to polecenie -
Konwertuje plik tekstowy z dos na format unix.
źródło
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.Ostateczna wersja pliku została idealnie zaimportowana do bazy danych.
źródło
W Uniksie prawdopodobnie łatwiej jest użyć polecenia „tr”.
źródło
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).źródło
Możesz to naprawić w vimie za pomocą
gdzie ^ jest znakiem kontrolnym.
źródło
^M
jest.To jedyna rzecz, która zadziałała w moim przypadku:
:e ++ff=dos
:wq
źródło
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
źródło
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.źródło
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 automatyczniefileformat
ustawiunix
go podczas czytania,^M (<CR>)
pojawi się. W takich przypadkachfileformats
wchodzi w grę. Zobacz:help ffs
szczegóły.źródło
Odkryłem, że od tygodni zanieczyszczam pliki ze względu na fakt, że moja instancja Homebrew Mvim była ustawiona na użycie filetype = dos. Wprowadzono wymaganą zmianę w .vimrc ....
źródło
spróbuj
:%s/\^M//
Przynajmniej to zadziałało dla mnie.źródło