Смотрите разрывы строк и возврат каретки в редакторе


180

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


1
ПРИМЕЧАНИЕ: иногда перевод строки ($) и возврат каретки (^ M) скрываются в МНОГИХ цветовых схемах, а также при использовании putty для ssh.
Ванесса Санчес

1
ОП Я думаю, что вы должны пересмотреть выбранный ответ. так как выбранный ответ не работает. но ответ CaptSaltyJack работает хорошо.
JavaSheriff

ОП Что покажет ОБА - это решение @arno. Мне нужно было видеть ОБА, потому что у меня есть файл случайным образом, использующий все 3 файловых формата ... И решение Арно работает
Уэйн Уокер

Ответы:


139

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


2
Тот же вопрос здесь: superuser.com/questions/97692/…
Алек Джейкобсон

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

15
К вашему сведению, чтобы отключить режим «сет-лист», используйте:set nolist
Tomofumi

@Tomofumi редактирование с вашим отношением будет приветствоваться!
Пипо

1
Неправильный ответ. : в сет-листе НЕ отображаются символы ^ M (CR). Используйте опцию -b, чтобы vi / vim работал.
Нанософт

265

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

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


4
Это синтаксис. :help editпоказывает e[dit]! [++opt] [+cmd]. И :help ++eговорит, что аргумент [++ opt] может использоваться для принудительного использования значения fileformat [..] .
Деннис

19
просто чтобы уточнить, :set listпоказывает newline ( $), :e ++ff=unixпоказывает CR ( ^M); если вы хотите увидеть оба, :set listто:e ++ff=unix
Ибо Ян

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 listCR не будет отображаться как ^Mбез, e ++ff=unixи почему не :set listимеет ничего общего с ^M.

Внутренне, когда Vim читает файл в свой буфер, он заменяет все символы конца строки своим собственным представлением (назовем его $). Чтобы определить, какие символы следует удалить, он сначала определяет, в каком формате окончания строк хранятся в файле. Если имеются только символы CRLF '\r\n'или только CR '\r'или только '\n'символы конца строки LF , то для параметра '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в режиме вставки. После записи буфера на диск и его повторного открытия вы увидите, ^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 , войдите в настройки и выберите Draw new lines

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

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

С помощью VSCode вы можете установить расширение Окончания строки .

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

shift + ctrl + p и начать введите имя плагина и переключиться, чтобы показать конец строки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.