vim pokazuje w każdej linii kończącej się ^ M
Jak mogę to zastąpić „normalnym” łamaniem linii?
vim
line-breaks
ByteNirvana
źródło
źródło
Odpowiedzi:
To jedyna rzecz, która działała dla mnie:
Znaleziono na: http://vim.wikia.com/wiki/File_format
źródło
:e ++ff=dos
następnie:set ff=unix
nastąpi konwersja zakończeń do rozsądnego formatu.Komenda
Gdzie
<Ctrl-V><Ctrl-M>
oznacza wpisz Ctrl+, Va następnie Ctrl+ M.Wyjaśnienie
zamiennik,% = wszystkie linie
Znaki ^ M (Ctrl-V jest sposobem Vima na pisanie znaku Ctrl ^, a Ctrl-M zapisuje M po wyrażeniu regularnym, co powoduje powstanie znaku specjalnego ^ M)
z nową linią (
\r
)I rób to globalnie (nie tylko pierwsze wystąpienie na linii).
źródło
:%s/<Ctrl-V><Ctrl-M>/\r/g
(gdzie \ r zastępuje ^ M znakiem nowej linii).W systemach Linux i Mac OS następujące prace:
gdzie
^V^M
oznacza wpisz Ctrl+ V, a następnie Ctrl+ M.Uwaga: w systemie Windows prawdopodobnie chcesz użyć
^Q
zamiast^V
, ponieważ domyślnie^V
jest mapowany do wklejania tekstu.źródło
%s/\r/\r/g
działał dobrze w MacVimie dla pliku wyświetlanego tylko^M
na końcu linii (jedna długa linia w kategoriach MacVim). Wyraźnie oznacza, że wzorzec różni się od części zamiennych tego polecenia.Wewnątrz
vim
spójrz na format pliku - DOS lub Unix::set filetype=unix
:set fileformat=unix
Plik zostanie zapisany bez znaków powrotu karetki (CR, ^ M).
źródło
set ff=unix
tak jak mały skrót w ten sam sposób,ft
co skrótfiletype
Plik, który utworzyłem za pomocą BBEdit w MacVimie, wyświetlał wiele
^M
zwrotów wierszy zamiast zwykłych. Poniższy ciąg zastępujący rozwiązał problem - mam nadzieję, że to pomoże:Jest to interesujące, ponieważ zastępuję podziały wiersza tym samym znakiem, ale przypuszczam, że Vim musi tylko uzyskać nowy, aby wyświetlać poprawnie. Byłbym zainteresowany, aby poznać mechanikę tego, dlaczego to działa.
źródło
\r
postacie,\n
mimo że określono je\r
jako zamiennik. Nie narzekam, właśnie tego chciałem. Po prostu dziwne.Najpierw użyj,
:set ff?
aby ustalić format pliku.Myślę, że może tak być
unix
, problem polega na tym, że plik został utworzony zfileformat=dos
dodaniem „^ M ^ J” na końcu linii, ale odczytanyflieformat=unix
tylko z usunięciem „^ J” z końca linii, pozostawiając tam „^ M”.Wystarczy wpisać
:e ++ff=dos
w wierszu poleceń Vima, aby zmienić format pliku z uniksowego na dos. To powinno rozwiązać problem. Jeśli nie,:%s/\r//g
powinien ci pomóc.źródło
:e ++ff=dos
następnie:set ff=unix
i:w
aby dopasować znak ^ M, musiałem go wizualnie zaznaczyć, a następnie użyć polecenia Kopiuj do schowka, aby go odzyskać. Możesz to przetestować, szukając znaku przed wypróbowaniem polecenia zamiany.
powinien wybrać pierwszą złą linię
zastąpi wszystkie błędne ^ M zwrotami karetki.
Działa to w MacVimie, który jest oparty na gvim 7.
EDYTOWAĆ:
Mam ten problem ponownie na moim komputerze z systemem Windows 10, który ma Ubuntu dla Windows, i myślę, że to powoduje problemy z formatem plików dla vima. W tym przypadku zmiana ff na unix, mac lub dos nie zrobiła nic poza zmianą ^ M na ^ J iz powrotem.
Rozwiązanie w tym przypadku:
Powodem, dla którego wybrałem tę trasę, jest to, że chciałem upewnić się, że nie niszczę mojego pliku. Mógłbym,
:%s/\r$//g
ale to natychmiast usunęłoby zwroty karetki i mógłbym mieć nieoczekiwane wyniki. Zamiast tego przekształcamy pojedynczy znak CR, tutaj znak ^ M, w spację, a następnie usuwamy wszystkie spacje na końcu linii (co dla mnie jest pożądanym rezultatem niezależnie)Przepraszam, że ożywiłem stare pytanie, na które już dawno udzielono odpowiedzi, ale wydawało się, że pojawiło się pewne zamieszanie i pomyślałem, że pomogę wyjaśnić niektóre z nich, ponieważ pojawia się wysoko w wyszukiwarkach Google.
źródło
Żadne z tych nie działało dla mnie, więc wypróbowałem to, co zadziałało:
rodzaj
:%s/
naciśnij CTRL-VCTRL-M
rodzaj
//g
naciśnij Enter
Tak więc powinno wyglądać ogólne polecenie Vima
:%s/^M//g
Co to robi:
:%s
(znajdź i zamień)/^M/
(ten symbol)/
(bez znaków)g
(globalnie).źródło
^ M jest pobierane przez Ctrl+ Vi Mtak samo
źródło
Bez potrzeby używania Ctrl:
:%s/\r$//
źródło
Prosta rzecz, która zadziałała dla mnie
źródło
Zrobiłem to z sed:
sed -i -e 's/\r/\n/g' filename
źródło
sed -e 's/\r/\n/g' <<< 'over and over'
->oven and oven
sed
ale nie dla BSDsed
(jak w OSX). Każdy, kto naprawia łamanie linii, prawdopodobnie działa z wieloma systemami operacyjnymi, więc warto wyjaśnić, kiedy odpowiedź zadziała.A co z tym, że
:%s/\r//g
to dla mnie całkowicie działało.To po prostu czyści koniec linii wszystkich linii, usuwa ^ M i to wszystko.
źródło
Istnieje wiele innych odpowiedzi na to pytanie, ale poniższe są dla mnie najlepsze, ponieważ potrzebowałem rozwiązania z linii poleceń:
Wyjaśnienie:
myfile
:e ++ff=dos
aby wymusić przeładowanie całego pliku jako zakończenia wiersza dos.:w ++ff=unix
aby zapisać plik przy użyciu zakończeń linii unixźródło
Ctrl+ Mminimalizuje moje okno, ale Ctrl+ Enterfaktycznie wstawia
^M
znak. Musiałem też upewnić się, że nie zdejmę Ctrlklucza między prasami.Tak więc dla mnie rozwiązaniem było:
Gdzie
<Ctrl-V><Ctrl-Enter>
oznacza nacisnąć i przytrzymać Ctrl , nacisnąć i zwolnić V, nacisnąć i zwolnić Enter, a następnie zwolnić Ctrl .Jeśli pracujesz nad plikiem wygenerowanym przez system Windows
Powyższe rozwiązanie doda dodatkową linię między istniejącymi liniami, ponieważ
\r
po^M
. Jest już niewidoczna .Aby temu zapobiec, chcesz usunąć
^M
znaki bez ich zastępowania.Gdzie
%
oznacza „w tym buforze”s
oznacza „zamiennik”,/
oznacza „(znajdź) następujący wzór”,<Ctrl-V><Ctrl-Enter>
oznacza klawisze, które należy nacisnąć, aby uzyskać^M
znak (patrz wyżej),//
oznacza „bez niczego” (lub „ze wzorem” między tymi dwoma ukośnikami, który jest pusty ”) ig
jest flagą oznaczającą„ globalnie ”, w przeciwieństwie do pierwszego wystąpienia w linii.źródło
To działało dla mnie:
\n
koniec linii)Więc w vimie:
ź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
Alternatywnie dostępne są narzędzia typu open source o nazwie dos2unix i unix2dos, które robią to samo. W systemie Linux są one prawdopodobnie instalowane domyślnie; w przypadku systemu Windows można je pobrać między innymi z http://www.bastet.com/ .
źródło
gdzie ^ M jest wpisywane przez jednoczesne naciśnięcie 3 klawiszy, ctrl + v + m
źródło
użyj narzędzia dos2unix, jeśli plik został utworzony w systemie Windows, użyj narzędzia mac2unix, jeśli plik został utworzony w systemie Mac. :)
źródło
Użyj jednego z następujących poleceń:
Lub
źródło
To działało dla mnie:
źródło
Aby zapisać naciśnięcia klawiszy , możesz uniknąć pisania Ctrl+ VCtrl+ M, umieszczając to w odwzorowaniu. Po prostu otwórz plik zawierający znak ^ M, pociągnij go i wklej do linii takiej jak ta w .vimrc:
źródło
Żadna z tych sugestii nie działała dla mnie, ponieważ udało mi się uzyskać
^M
mnóstwo podziałów linii podczas pracy zarówno z vimem, jak i zaćmieniem. Podejrzewam, że spotkałem się ze sprawą zewnętrzną, ale na wypadek, gdyby to pomogło każdemu, kto to zrobił.I rozwiązało to mój problem
źródło
Jeśli wpiszesz
^M
za pomocąShift+6 Caps+M
, nie zaakceptuje.Musisz wpisać
ctrl+v ctrl+m
.źródło
^M
daje niechciane podziały linii. Aby to obsłużyć, możemy użyćsed
polecenia w następujący sposób:źródło
Po prostu usuń
set binary
w swoim .vimrc!źródło
Aby użyć
sed
w systemie MacOS, wykonaj następujące czynności:Objaśnienie:
$'STRING'
składnia tutaj odnosi się do powłoki bash. Komputery Mac nie traktują\r
jako znaków specjalnych. Cytując ciąg poleceń, nakazujesz$''
powłoce zastąpić\r
rzeczywistym\r
znakiem określonym w standardzie ANSI-C.źródło
„Ta funkcja zachowuje listę skoków
źródło
Spędziłem popołudnie walcząc z \ n ctrl-v 012 (oba dostarczają mi null). i pracowałem przez ten wątek, aż dotarłem do metagraphera.
\r
działało dobrze dla mnie!zwrócił się tak:
w coś takiego:
Magia. Jestem głęboko wdzięczny
źródło