Дивіться розриви рядків та повернення каретки в редакторі


180

Хтось знає про текстовий редактор в Linux, який дозволяє мені бачити розриви рядків і повернення каретки? Чи підтримує Vim цю функцію?


1
ПРИМІТКА: іноді новий рядок ($) та повернення каретки (^ М) ховаються у МНОГО кольорових схемах, а також під час використання шпаклівки для ssh.
Ванесса Санчес

1
ОП Я думаю, вам слід переглянути обрану відповідь. оскільки обрана відповідь не працює. але відповідь CaptSaltyJack працює добре.
JavaSheriff

ОП Що покаже БОТЬ, це рішення @arno. Мені потрібно було бачити БОТ, тому що у мене є файл випадковим чином, використовуючи всі 3 формати файлів ... І рішення арно працює
Wayne Walker

Відповіді:


139

:set listу Vim покаже пробіл. Кінець рядків відображається як " $", а повернення каретки зазвичай відображається як " ^M".


2
Тут те саме питання: superuser.com/questions/97692/…
Alec Jacobson

254
Неправильно, :set listНЕ відображатиме ^Mсимволи (CR). Постачання -bопції vi / vim працюватиме. Або після завантаження vim введіть::e ++ff=unix
CaptSaltyJack

15
FYI, щоб вимкнути режим "встановити список", використовуйте:set nolist
Tomofumi

@Tomofumi редакція з вашою пропозицією буде вітатися!
Піпо

1
Неправильну відповідь. : список набору НЕ відображатиме ^ М символів (CR). Використовуйте опцію -b для vi / vim.
nanosoft

265

Щоб не погодитися з офіційною відповіддю:

:set listбуде НЕ показувати ^ M символів (CRS). Поставлення параметра -b для vi / vim буде працювати. Або після завантаження vim введіть :e ++ff=unix.


4
Це синтаксис. :help editпоказує e[dit]! [++opt] [+cmd]. І :help ++eговорить, що аргумент [++ opt] можна використовувати для примусового значення "fileformat" [..] .
dennis

19
просто для уточнення, :set listпоказує новий рядок ( $), :e ++ff=unixпоказує CR ( ^M); якщо ви хочете побачити , як, :set listпотім:e ++ff=unix
Yibo Ян

5
Щоб розширити коментар @ dennis, :set ff=unixскажіть Vim змінити закінчення рядків на стиль unix (як частина встановлення файлового формату), тому символів ^ M вже немає (і тому вони не відображаються). :e ++ff=unixвказує на примусове встановлення файлового формату як unixбез фактичного зміни вмісту. Тож vim читає його як файл Unix, бачить символи CR як додаткові та відображає їх як ^ M.
sundar

2
Жоден досі не працює для мене vimз якихось причин ... Я маю на увазі ні -bваріант, ні :e ++ff=unixколи всередині :(
RAM237

3
все в порядку,: e ++ ff = unix працював. А тепер як її вимкнути?
Кий

78

VI показує нові рядки (символ LF, код x0A), показуючи наступний текст у наступному рядку.

Використовуйте -bперемикач для двійкового режиму. Наприклад , vi -b filenameчи vim -b filename --.

Потім він покаже символи CR ( x0D), які зазвичай не використовуються у файлах стилю Unix, як символи ^M.


Мені зазвичай не потрібно, щоб рядок закінчувався, оскільки я здебільшого працюю в Unixоточенні. Але я хотів би попередити про закінчення рядків типу Windows, якщо вони є у файлі. Відображається vi -b filenameчи :set binaryпросто відображається, ^Mякщо це файл типу Windows, а чи немає інших закінчень рядків інакше?
alpha_989

31

Просто для уточнення, чому :set listне відображатиметься CR як ^Mбез, e ++ff=unixі чому :set listнемає нічого спільного з ^M's.

Внутрішньо, коли Vim читає файл у свій буфер, він замінює всі символи, що закінчуються рядками, своїм власним представленням (давайте назвемо його $). Щоб визначити, які символи слід видалити, він спочатку виявляє, у якому форматі рядки формату зберігаються у файлі. Якщо є тільки CRLF '\r\n'або тільки CR , '\r'або тільки LF '\n'завершення рядків символів, то 'fileformat'встановлюється на dos, macі unixвідповідно.

Коли listпараметр встановлений, Vim відображає $символ, коли відбувся розрив рядка незалежно від того, який fileformatваріант був виявлений. Він використовує власне внутрішнє представлення розривів рядків, і саме це відображається.

Тепер, коли ви пишете буфер на диск, Vim вставляє рядкові символи відповідно до того, які fileformatпараметри виявлено, по суті перетворюючи всі внутрішні $символи на відповідні символи. Якщо це fileformatсталося, unixто він просто запише \nзамість свого внутрішнього розриву рядків.

Трюк - змусити Vim прочитати dosзакодований файл як unixодин. Чистий ефект полягає в тому, що він видалить усі \nзалишені \rнедоторкані та відобразить їх як ^M"у вашому буфері". Налаштування :set listдодатково покаже внутрішні закінчення рядків як $. Зрештою, ви бачите ^M$замість dosзакодованих перерв рядків.

Також зауважте, що :set listне має нічого спільного з показом ^M's. Ви можете перевірити це самостійно (переконайтеся, що ви відключили listопцію спочатку), вставивши один CR за допомогою, CTRL-Vа потім Enterу режимі вставки. Написавши буфер на диск та відкривши його знову, ви побачите, ^Mнезважаючи на те, що listопція встановлена ​​на 0.

Докладніше про формати файлів можна знайти на http://vim.wikia.com/wiki/File_format або ввівши :help 'fileformat'Vim.


11

Спробуйте виконати наступну команду.

: встановити двійковий

У VIM це має робити те саме, що і за допомогою параметра "-b" командного рядка. Якщо ви помістите це у свій запуск (тобто .vimrc) файл, він завжди буде на місці.

У багатьох системах * nix існує команда "dos2unix" або "unix2dos", яка може обробити файл та виправити будь-які проблеми, що підозрюються у закінченні рядка. Якщо проблем із закінченнями рядків немає, файли не будуть змінені.


На жаль, у моїй системі (Ubuntu 16.04) set binaryне те саме, що vim -b filename.py. Будь-яка ідея чому? Я перевірив helpі, здається, те, що ви говорите, як правило, правильно. Як я зрозумію, чому це так?
alpha_989

:e ++ff=unixпоказує ^Mправильно і не показує, коли я використовую unixфайли типу. Тому я думаю, що проблема вирішена наразі ...
alpha_989

6

Я пропоную вам відредагувати .vimrc файл для запуску списку команд. Відредагуйте .vimrc-файл, наприклад:

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

Коли ви виконуєте vim, команди в .vimrc виконуються, і ви можете побачити цей приклад:

My line with CRLF eol here ^M¶

2

за допомогою, catі -Aви можете побачити нові рядки як $, вкладки як^I
cat -A myfile


0

Ви можете переглянути лінії перерви за допомогою редактора gedit .

По-перше, якщо ви не встановили:

sudo apt-get install gedit

Тепер встановіть плагіни gedit :

sudo apt-get install gedit-plugins

і виберіть плагін Draw Spaces , введіть у меню "Налаштування" та оберіть " Намалювати нові рядки"

введіть тут опис зображення

введіть тут опис зображення

За допомогою VSCode можна встановити розширення закінчень рядків .

Sublime Text 3 має плагін під назвою RawLineEdit, який відображатиме закінчення рядків та дозволяє вставляти довільний тип рядкового закінчення

shift + ctrl + p і почніть вводити ім'я плагіна та перемикайте, щоб показати закінчення рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.