Хтось знає про текстовий редактор в Linux, який дозволяє мені бачити розриви рядків і повернення каретки? Чи підтримує Vim цю функцію?
Хтось знає про текстовий редактор в Linux, який дозволяє мені бачити розриви рядків і повернення каретки? Чи підтримує Vim цю функцію?
Відповіді:
:set list
у Vim покаже пробіл. Кінець рядків відображається як " $
", а повернення каретки зазвичай відображається як " ^M
".
:set list
НЕ відображатиме ^M
символи (CR). Постачання -b
опції vi / vim працюватиме. Або після завантаження vim введіть::e ++ff=unix
:set nolist
Щоб не погодитися з офіційною відповіддю:
:set list
буде НЕ показувати ^ M символів (CRS). Поставлення параметра -b для vi / vim буде працювати. Або після завантаження vim введіть :e ++ff=unix
.
:help edit
показує e[dit]! [++opt] [+cmd]
. І :help ++e
говорить, що аргумент [++ opt] можна використовувати для примусового значення "fileformat" [..] .
:set list
показує новий рядок ( $
), :e ++ff=unix
показує CR ( ^M
); якщо ви хочете побачити , як, :set list
потім:e ++ff=unix
:set ff=unix
скажіть Vim змінити закінчення рядків на стиль unix (як частина встановлення файлового формату), тому символів ^ M вже немає (і тому вони не відображаються). :e ++ff=unix
вказує на примусове встановлення файлового формату як unix
без фактичного зміни вмісту. Тож vim читає його як файл Unix, бачить символи CR як додаткові та відображає їх як ^ M.
vim
з якихось причин ... Я маю на увазі ні -b
варіант, ні :e ++ff=unix
коли всередині :(
VI показує нові рядки (символ LF, код x0A
), показуючи наступний текст у наступному рядку.
Використовуйте -b
перемикач для двійкового режиму. Наприклад , vi -b filename
чи vim -b filename --
.
Потім він покаже символи CR ( x0D
), які зазвичай не використовуються у файлах стилю Unix, як символи ^M
.
Unix
оточенні. Але я хотів би попередити про закінчення рядків типу Windows, якщо вони є у файлі. Відображається vi -b filename
чи :set binary
просто відображається, ^M
якщо це файл типу Windows, а чи немає інших закінчень рядків інакше?
Просто для уточнення, чому :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.
Спробуйте виконати наступну команду.
: встановити двійковий
У VIM це має робити те саме, що і за допомогою параметра "-b" командного рядка. Якщо ви помістите це у свій запуск (тобто .vimrc) файл, він завжди буде на місці.
У багатьох системах * nix існує команда "dos2unix" або "unix2dos", яка може обробити файл та виправити будь-які проблеми, що підозрюються у закінченні рядка. Якщо проблем із закінченнями рядків немає, файли не будуть змінені.
set binary
не те саме, що vim -b filename.py
. Будь-яка ідея чому? Я перевірив help
і, здається, те, що ви говорите, як правило, правильно. Як я зрозумію, чому це так?
:e ++ff=unix
показує ^M
правильно і не показує, коли я використовую unix
файли типу. Тому я думаю, що проблема вирішена наразі ...
Я пропоную вам відредагувати .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¶
Ви можете переглянути лінії перерви за допомогою редактора gedit .
По-перше, якщо ви не встановили:
sudo apt-get install gedit
Тепер встановіть плагіни gedit :
sudo apt-get install gedit-plugins
і виберіть плагін Draw Spaces , введіть у меню "Налаштування" та оберіть " Намалювати нові рядки"
За допомогою VSCode можна встановити розширення закінчень рядків .
Sublime Text 3 має плагін під назвою RawLineEdit, який відображатиме закінчення рядків та дозволяє вставляти довільний тип рядкового закінчення
shift + ctrl + p
і почніть вводити ім'я плагіна та перемикайте, щоб показати закінчення рядка.