Кто-нибудь знает о текстовом редакторе в Linux, который позволяет мне видеть разрывы строк и возврат каретки? Vim поддерживает эту функцию?
Кто-нибудь знает о текстовом редакторе в Linux, который позволяет мне видеть разрывы строк и возврат каретки? Vim поддерживает эту функцию?
Ответы:
:set listв Vim покажет пробел. Конец строк отображается как ' $', а возврат каретки обычно отображается как ' ^M'.
:set listНЕ будет показывать ^Mсимволы (CR). Предоставление -bопции vi / vim будет работать. Или, как только vim загрузится, введите::e ++ff=unix
:set nolist
Чтобы не согласиться с официальным ответом:
:set listне будет отображать символы ^ M (CR). Предоставление опции -b для vi / vim будет работать. Или после загрузки vim введите :e ++ff=unix.
:help editпоказывает e[dit]! [++opt] [+cmd]. И :help ++eговорит, что аргумент [++ opt] может использоваться для принудительного использования значения fileformat [..] .
:set listпоказывает newline ( $), :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 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.
Попробуйте следующую команду.
: установить двоичный файл
В 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¶
с помощью catи -Aвы можете увидеть новые строки как $, вкладки как^I
cat -A myfile
Вы можете просмотреть строки разрыва, используя редактор 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 и начать введите имя плагина и переключиться, чтобы показать конец строки.