Zobacz podziały wierszy i powroty karetki w edytorze

180

Czy ktoś zna edytor tekstu w systemie Linux, który pozwala mi wyświetlać podziały wierszy i powroty karetki? Czy Vim obsługuje tę funkcję?

usertest
źródło
1
UWAGA: czasami znak nowej linii ($) i powrót karetki (^ M) są ukryte w WIELU schematach kolorów, a także podczas używania putty do ssh.
Vanessa Sanchez
1
OP Myślę, że powinieneś ponownie rozważyć wybraną odpowiedź. ponieważ wybrana odpowiedź nie działa. ale odpowiedź CaptSaltyJack działa dobrze.
JavaSheriff,
OP To, co pokaże OBA to rozwiązanie @arno. Musiałem zobaczyć oba, ponieważ mam plik losowo używający wszystkich 3 formatów plików ... I rozwiązanie Arno działa
Wayne Walker

Odpowiedzi:

139

:set listw Vimie pokaże białe spacje. Koniec wierszy jest wyświetlany jako „ $”, a powrót karetki zwykle jako „ ^M”.

jay.lee
źródło
2
To samo pytanie: superuser.com/questions/97692/ ...
Alec Jacobson
254
Niepoprawnie, :set listNIE wyświetla ^Mznaków (CR). Podanie -bopcji vi / vim zadziała. Lub po załadowaniu vima wpisz::e ++ff=unix
CaptSaltyJack
15
FYI, aby wyłączyć tryb „set list”, użyj:set nolist
Tomofumi,
@Tomofumi edycja z Twoim stanowiskiem będzie mile widziana!
Pipo
1
Zła odpowiedź. : set list NIE pokaże ^ M znaków (CR). Użyj opcji -b do vi / vim zadziała.
nanosoft
265

Aby nie zgodzić się z oficjalną odpowiedzią:

:set listbędzie nie pokazują znaki ^ M (CRS). Podanie opcji -b do vi / vim zadziała. Lub po załadowaniu vima wpisz :e ++ff=unix.

CaptSaltyJack
źródło
4
To jest składnia. :help editpokazuje e[dit]! [++opt] [+cmd]. I :help ++emówi, że argument [++ opt] może być użyty do wymuszenia wartości „fileformat” [..] .
dennis
19
tylko dla wyjaśnienia, :set listpokazuje znak nowej linii ( $), :e ++ff=unixpokazuje CR ( ^M); jeśli chcesz zobaczyć oba, :set listto:e ++ff=unix
Yibo Yang
5
Aby rozwinąć komentarz @ dennis, :set ff=unixmówi Vimowi, aby zmienił zakończenia linii na styl unixowy (jako część ustawiania formatu pliku), więc znaki ^ M już tam nie ma (i nie są wyświetlane). :e ++ff=unixmówi mu, aby wymusił ustawienie formatu pliku unixbez faktycznej zmiany zawartości. Więc vim czyta to jak plik Unix, traktuje znaki CR jako dodatkowe i wyświetla je jako ^ M.
sundar - Przywróć Monikę
2
Ani w dalszym ciągu nie działa u mnie vimz jakiegoś powodu ... nie mam na myśli ani -bopcji, ani :e ++ff=unixwewnątrz :(
RAM237
3
w porządku,: e ++ ff = unix działał. Jak mam to wyłączyć?
Croo
78

VI pokazuje znaki nowej linii (znak LF, kod x0A), pokazując kolejny tekst w następnej linii.

Użyj -bprzełącznika dla trybu binarnego. Np . vi -b filenameLub vim -b filename --.

Następnie pokaże znaki CR ( x0D), które normalnie nie są używane w plikach stylu uniksowego, jako znaki ^M.

Larry K.
źródło
Zazwyczaj nie muszę widzieć końcówki linii, ponieważ pracuję głównie w Unixśrodowisku. Ale chciałbym zostać ostrzeżony o zakończeniach linii typu Windows, jeśli takie istnieją w pliku. Will vi -b filenamelub :set binarypo prostu pokazać ^M, czy jest to plik typu okna i nie ma innych zakończeń linii inaczej?
alpha_989
31

Tylko po to, by wyjaśnić, dlaczego :set listnie wyświetla się CR jako ^Mbez e ++ff=unixi dlaczego :set listnie ma z nimi nic wspólnego ^M.

Wewnętrznie, kiedy Vim czyta plik do swojego bufora, zastępuje wszystkie znaki końca linii własną reprezentacją (nazwijmy ją $). Aby określić, jakie znaki należy usunąć, najpierw wykrywa, w jakim formacie zakończenia linii są przechowywane w pliku. Jeśli istnieją tylko CRLF '\r\n'lub tylko CR '\r'lub LF tylko '\n'znaków kończących wiersz, to 'fileformat'jest ustawiona dos, maca unixodpowiednio.

Gdy listopcja jest ustawiona, Vim wyświetla $znak, kiedy nastąpił podział linii, bez względu na to, która fileformatopcja została wykryta. Używa własnej wewnętrznej reprezentacji podziałów linii i właśnie to wyświetla.

Teraz, kiedy zapisujesz bufor na dysk, Vim wstawia znaki końca linii zgodnie z fileformatopcjami, które zostały wykryte, zasadniczo konwertując wszystkie te wewnętrzne na $odpowiednie znaki. Jeśli tak fileformatsię unixstanie, po prostu zapisze \nw miejscu wewnętrznego końca wiersza.

Sztuczka polega na zmuszeniu Vima do odczytania doszakodowanego pliku jako unixjednego. Efektem netto jest to, że usunie wszystkie \npozostawione rzeczy \rnietknięte i wyświetli je jako ^Mw twoim buforze. Ustawienie :set listdodatkowo pokaże wewnętrzne zakończenia linii jako $. W końcu ^M$zamiast doszakodowanych znaków końca linii widzisz .

Zauważ też, że :set listnie ma to nic wspólnego z wyświetlaniem ^Mplików. Możesz to sprawdzić samodzielnie (upewnij się, że najpierw wyłączyłeś listopcję), wstawiając pojedynczą CR za pomocą, CTRL-Va następnie Enterw trybie wstawiania. Po zapisaniu bufora na płytę i ponownym otwarciu, zobaczysz ^Mpomimo ustawienia listopcji na 0.

Możesz znaleźć więcej o formatach plików na http://vim.wikia.com/wiki/File_format lub wpisując :help 'fileformat'Vim.

Paweł Smolak
źródło
11

Wypróbuj następujące polecenie.

: ustaw binarny

W VIM powinno to zrobić to samo, co użycie opcji wiersza poleceń „-b”. Jeśli umieścisz to w swoim pliku startowym (np. .Vimrc), zawsze będzie na miejscu.

W wielu systemach * nix istnieje polecenie „dos2unix” lub „unix2dos”, które może przetworzyć plik i poprawić wszelkie podejrzane problemy z zakończeniem linii. Jeśli nie ma problemu z zakończeniami linii, pliki nie zostaną zmienione.

Brian S. Wilson
źródło
Niestety w moim systemie (Ubuntu 16.04) set binarynie jest to samo co vim -b filename.py. Każdy pomysł, dlaczego? Sprawdziłem helpi wydaje się, że to, co mówisz, jest ogólnie poprawne. Jak mogę się dowiedzieć, dlaczego tak jest?
alpha_989
:e ++ff=unixwyświetla się ^Mpoprawnie i nie pokazuje, kiedy używam unixplików typu .. Więc myślę, że problem został rozwiązany na razie ...
alpha_989
6

Proponuję edytować plik .vimrc, aby uruchomić listę poleceń. Edytuj swój plik .vimrc, na przykład:

cat >> ~/.vimrc <<EOF
set ffs=unix
set encoding=utf-8
set fileencoding=utf-8
set listchars=eol:¶
set list
EOF

Kiedy uruchamiasz vima, wykonywane są polecenia do .vimrc i możesz zobaczyć ten przykład:

My line with CRLF eol here ^M¶
Arno
źródło
2

używając cati -Amożesz zobaczyć nowe linie jako $, karty jako^I
cat -A myfile

mirhossein
źródło
0

Możesz wyświetlać linie przerwania za pomocą edytora gedit .

Po pierwsze, jeśli nie masz zainstalowanego:

sudo apt-get install gedit

Teraz zainstaluj wtyczki gedit :

sudo apt-get install gedit-plugins

i wybierz wtyczkę Draw Spaces , wejdź w Preferencje i wybierz Rysuj nowe linie

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Za pomocą VSCode możesz zainstalować rozszerzenie końcówek linii .

Sublime Text 3 ma wtyczkę o nazwie RawLineEdit , która wyświetla końce linii i umożliwia wstawianie dowolnego typu zakończenia linii

shift + ctrl + p i zacznij, wpisz nazwę wtyczki i przełącz, aby wyświetlić zakończenie linii.

danilo
źródło