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ę?
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ę?
Odpowiedzi:
:set list
w Vimie pokaże białe spacje. Koniec wierszy jest wyświetlany jako „ $
”, a powrót karetki zwykle jako „ ^M
”.
:set list
NIE wyświetla ^M
znaków (CR). Podanie -b
opcji vi / vim zadziała. Lub po załadowaniu vima wpisz::e ++ff=unix
:set nolist
Aby nie zgodzić się z oficjalną odpowiedzią:
:set list
będzie nie pokazują znaki ^ M (CRS). Podanie opcji -b do vi / vim zadziała. Lub po załadowaniu vima wpisz :e ++ff=unix
.
:help edit
pokazuje e[dit]! [++opt] [+cmd]
. I :help ++e
mówi, że argument [++ opt] może być użyty do wymuszenia wartości „fileformat” [..] .
:set list
pokazuje znak nowej linii ( $
), :e ++ff=unix
pokazuje CR ( ^M
); jeśli chcesz zobaczyć oba, :set list
to:e ++ff=unix
:set ff=unix
mó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=unix
mówi mu, aby wymusił ustawienie formatu pliku unix
bez faktycznej zmiany zawartości. Więc vim czyta to jak plik Unix, traktuje znaki CR jako dodatkowe i wyświetla je jako ^ M.
vim
z jakiegoś powodu ... nie mam na myśli ani -b
opcji, ani :e ++ff=unix
wewnątrz :(
VI pokazuje znaki nowej linii (znak LF, kod x0A
), pokazując kolejny tekst w następnej linii.
Użyj -b
przełącznika dla trybu binarnego. Np . vi -b filename
Lub vim -b filename --
.
Następnie pokaże znaki CR ( x0D
), które normalnie nie są używane w plikach stylu uniksowego, jako znaki ^M
.
Unix
środowisku. Ale chciałbym zostać ostrzeżony o zakończeniach linii typu Windows, jeśli takie istnieją w pliku. Will vi -b filename
lub :set binary
po prostu pokazać ^M
, czy jest to plik typu okna i nie ma innych zakończeń linii inaczej?
Tylko po to, by wyjaśnić, dlaczego :set list
nie wyświetla się CR jako ^M
bez e ++ff=unix
i dlaczego :set list
nie 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
, mac
a unix
odpowiednio.
Gdy list
opcja jest ustawiona, Vim wyświetla $
znak, kiedy nastąpił podział linii, bez względu na to, która fileformat
opcja 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 fileformat
opcjami, które zostały wykryte, zasadniczo konwertując wszystkie te wewnętrzne na $
odpowiednie znaki. Jeśli tak fileformat
się unix
stanie, po prostu zapisze \n
w miejscu wewnętrznego końca wiersza.
Sztuczka polega na zmuszeniu Vima do odczytania dos
zakodowanego pliku jako unix
jednego. Efektem netto jest to, że usunie wszystkie \n
pozostawione rzeczy \r
nietknięte i wyświetli je jako ^M
w twoim buforze. Ustawienie :set list
dodatkowo pokaże wewnętrzne zakończenia linii jako $
. W końcu ^M$
zamiast dos
zakodowanych znaków końca linii widzisz .
Zauważ też, że :set list
nie ma to nic wspólnego z wyświetlaniem ^M
plików. Możesz to sprawdzić samodzielnie (upewnij się, że najpierw wyłączyłeś list
opcję), wstawiając pojedynczą CR za pomocą, CTRL-V
a następnie Enter
w trybie wstawiania. Po zapisaniu bufora na płytę i ponownym otwarciu, zobaczysz ^M
pomimo ustawienia list
opcji 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.
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.
set binary
nie jest to samo co vim -b filename.py
. Każdy pomysł, dlaczego? Sprawdziłem help
i wydaje się, że to, co mówisz, jest ogólnie poprawne. Jak mogę się dowiedzieć, dlaczego tak jest?
:e ++ff=unix
wyświetla się ^M
poprawnie i nie pokazuje, kiedy używam unix
plików typu .. Więc myślę, że problem został rozwiązany na razie ...
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¶
używając cat
i -A
możesz zobaczyć nowe linie jako $
, karty jako^I
cat -A myfile
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
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.