Смотрите разрывы строк и возврат каретки в редакторе - PullRequest
147 голосов
/ 05 октября 2010

Кто-нибудь знает о текстовом редакторе в Linux, который позволяет мне видеть разрывы строк и возврат каретки? Vim поддерживает эту функцию?

Ответы [ 6 ]

216 голосов
/ 03 декабря 2014

Чтобы не согласиться с официальным ответом:

:set list будет не показывать ^ M символов (CR).Предоставление опции -b для vi / vim будет работать.Или после загрузки vim введите :e ++ff=unix.

118 голосов
/ 05 октября 2010

:set list в Vim покажет пробел. Конец строк отображается как '$', а возврат каретки обычно отображается как '^M'.

76 голосов
/ 05 октября 2010

VI показывает новые строки (символ НЧ, код x0A), показывая следующий текст в следующей строке.

Используйте переключатель -b для двоичного режима.Например, vi -b filename или vim -b filename --.

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

23 голосов
/ 02 августа 2017

Просто чтобы уточнить, почему :set list не будет отображать CR как ^M без e ++ff=unix и почему :set list не имеет ничего общего с ^M.

Внутренне, когда 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.Вы можете проверить это самостоятельно (сначала убедитесь, что вы отключили опцию list), вставив один CR, используя CTRL-V, а затем Enter в режиме вставки.После записи буфера на диск и его повторного открытия вы получите ses ^M, несмотря на то, что для параметра list установлено значение 0.

Подробнее о форматах файлов можно узнать по http://vim.wikia.com/wiki/File_format или набрав :help 'fileformat' в Vim.

10 голосов
/ 07 января 2015

Попробуйте следующую команду.

: установить двоичный файл

В VIM это должно быть то же самое, что и использование параметра командной строки "-b". Если вы поместите это в свой файл запуска (то есть .vimrc), он всегда будет на вашем месте.

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

5 голосов
/ 14 июня 2017

Я предлагаю вам отредактировать ваш файл .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¶
...