Русский

Инструменты разработчика · Сравнение текста

Каждая строка изменена? Окончания строк, конечные пробелы и спецификации в различиях

· Как это работает

разница текста окончания строк отладка

Параллельные строки складываются с дополнительным знаком окончания и маркером первой строки.
Оригинальная векторная иллюстрация ToolAcre

Диагностирует три невидимые причины сравнения, в котором каждая строка рассматривается как различная, и показывает, как определить, какая из них у вас есть, прежде чем обвинять автора.

Один и тот же файл, сохраненный дважды, по-видимому, переписанный — представляет собой обычный случай файла, отредактированного в двух операционных системах.

Два сохранения могут выглядеть как перезапись, когда редактор меняет невидимые символы, но поведение ToolAcre зависит от того, какие символы были изменены. Он нормализует концы строк перед сопоставлением, в то время как пробелы по краям строки и U+FEFF в начале остаются обычным содержимым строки, если другая опция не изменит ключ.

Создайте диагностический прибор вместо того, чтобы гадать по цвету. Сравните одну пару, отличающуюся только окончаниями, другую, отличающуюся конечными пробелами, и третью с ведущим BOM. Контролируемые пары надежнее выявляют границы инструмента, чем реальный файл, содержащий сразу несколько невидимых изменений.

CRLF в сравнении с LF: символ в конце каждой строки — объясняет, почему Windows заканчивает строки двумя символами, а Unix — одним, и как при разнице воспринимается дополнительный возврат каретки.

`splitLines` заменяет CRLF и одиночный CR на LF, а затем разделяется. Тесты показывают, что все три соглашения создают одни и те же массивы. Поэтому разница, состоящая только из CRLF, невидима, даже если параметр «Игнорировать пробелы» отключен; утверждение схемы о том, что каждая строка будет отличаться, противоречит этой реализации.

Последняя новая строка также не создает дополнительную строку. После разделения одна пустая запись терминала удаляется. Настоящие пустые строки в середине остаются единицами сравнения, поэтому такое поведение отличает соглашение об окончании файла от намеренного вертикального разделения внутри документа.

ToolAcre нормализует CRLF, CR и LF перед сравнением, поэтому исчезают только конечные изменения

Конечные пробелы остаются в исходных строках. При обычном сравнении `name=value` и `name=value ` имеют разные ключи. Игнорировать пробелы обрезает оба конца и сворачивает внутренние фрагменты, так что этот параметр может обеспечить совпадение пары, сохраняя при этом левый исходный текст в отображаемой равной строке.

Библиотека также реализует более узкую опцию `ignoreTrailingWhitespace`, но текущий пользовательский интерфейс не предоставляет ее. В статьях не должно быть описания флажка, который пользователи не могут установить. Поставляемая панель предлагает «Игнорировать регистр», «Игнорировать все различия в пробелах» и «Свернуть длинные неизмененные прогоны».

Знак порядка байтов в верхней части файла описывает символ U+FEFF, который некоторые редакторы добавляют к файлам UTF-8, и почему он отличает только первую строку.

Знак порядка байтов UTF-8, декодированный в текст JavaScript, равен U+FEFF в начале первой строки. `splitLines` не имеет явного удаления BOM. При обычном сопоставлении этот символ может отличать только первую строку, в то время как последующие строки остаются равными.

Операции с пробелами JavaScript могут трактовать U+FEFF как пробелы при вызове «Игнорировать пробелы» `trim`, но в этой статье это не обобщается на поведение декодирования файлов. Редактор получает строки; он не читает байты файлов и не сообщает кодировки. Проверяйте фактический символ, когда имеет значение происхождение на уровне байтов.

Рабочий пример: разделение трех причин — дает путь решения: разница только в первой строке указывает на BOM, каждая строка указывает на окончания, разбросанные строки указывают на конечные пробелы

Начните с `alpha beta` и `alpha beta`: результат одинаков. Затем сравните `alpha beta` с `alpha beta`: обычный режим покажет заменённые строки, а режим игнорирования пробелов сочтёт их одинаковыми. Наконец, добавьте U+FEFF перед `alpha` с одной стороны и посмотрите, как изменится первая строка.

Эта последовательность разделяет причины с помощью операций, проверенных репозиторием. Если после завершения нормализации каждая строка по-прежнему отличается, исследуйте содержимое, отступы или конечные символы, а не обвиняйте только CRLF. Если отличается только первая строка, проверьте ее ведущие кодовые точки, прежде чем перезаписывать весь файл.

Использование опции пробелов в качестве диагностики — показывает, как включение игнорирования пробелов в сравнении текста ToolAcre может поглощать конечные пробелы и шум в конце строки, поэтому реальные изменения выделяются.

Игнорировать пробелы полезно при устранении шума в конце пробела, поскольку он обрезает и уплотняет строки. Он не несет ответственности за сокрытие CRLF от LF; это уже произошло во время разделения. Разделение этих этапов предотвращает ошибочное заключение о том, какой вариант исправил сравнение.

Запустите оба представления, поскольку обрезка может скрыть значимые отступы, а сжатие может изменить значения фиксированной ширины или строковые литералы. Тихий нормализованный результат говорит о том, что ключи совпадают при этом преобразовании. Он не подтверждает, что исходные файлы байтово идентичны или семантически взаимозаменяемы.

Режим пробелов диагностирует конечные пробелы, а окончания строк уже нормализованы.

Text diff не конвертирует файлы, не настраивает Git, не изменяет настройки редактора и не предоставляет шестнадцатеричные байты. Он принимает вставленные строки и сообщает об операциях со строками. Советы по `.gitattributes`, `core.autocrlf` или восстановлению кодировки относятся к инструментам, поведение которых можно проверить отдельно.

Инструмент также не может различить, как невидимый символ вошел в текст. Форматер, буфер обмена, декодер или ручное редактирование могут создать одну и ту же строку. Используйте сравнение, чтобы найти строку, затем проверьте исходный конвейер, прежде чем назначать причину.

Вывод: проверяйте невидимое, прежде чем обвинять автора — обобщает путь диагностики и отмечает результаты сравнения в вашем браузере, поэтому конфиденциальные файлы остаются на вашем компьютере.

Проверяйте невидимые символы в фиксированном порядке: окончания, конечные или внутренние пробелы, затем ведущие специальные символы. Тесты ToolAcre дают уверенный результат для первой категории, а его параметры помогают изолировать вторую. Третьему может понадобиться инспектор персонажей за пределами этого маршрута.

Разделение строк на стороне браузера позволяет исчезнуть межплатформенным конечным различиям. Это удобно, но это также означает, что этот инструмент не может доказать, что два исходных файла используют одни и те же физические байты новой строки. Выбирайте утилиту с учетом байтов, если требуется сохранение точного представления проводов или репозитория.