Проверка различий
Вставьте два текста и увидите различия с подсветкой.
Diff
- Вставьте исходный текст в Текст A.
- Вставьте изменённую версию в Текст B.
- Выберите Строки для кода/конфига или Слова для прозы.
- Включите Игнорировать пробелы или Игнорировать регистр, если невидимые изменения добавляют шум.
- Прочитайте подсвеченный вывод ниже — зелёное добавлено, красное удалено.
Что это делает?
Проверка различий сравнивает два текста и показывает точно, что было добавлено, удалено или осталось неизменным. Режим Строки рассматривает каждую строку как единицу — идеально для исходного кода и конфига, где обычно меняется вся строка. Режим Слова разделяет по пробелам и лучше для прозы, где важны правки на уровне токенов.
Пример
Текст A:
function greet(name) {
console.log("Hello, " + name);
} Текст B:
function greet(name) {
if (!name) name = "world";
console.log(`Hello, ${name}!`);
} Diff в режиме строк:
function greet(name) {
+ if (!name) name = "world";
- console.log("Hello, " + name);
+ console.log(`Hello, ${name}!`);
} Частые ошибки и подводные камни
Когда две строки выглядят одинаково, но diff всё ещё помечает их как изменённые, причина почти всегда — невидимый символ или разница в регистре. Вот обычные подозреваемые.
- CRLF vs LF окончания строк. Windows-файлы заканчивают строки \r\n, Unix-файлы — \n. Даже разница в один символ помечает каждую строку. Исправьте, включив Игнорировать пробелы, или нормализуйте через dos2unix / настройки редактора.
- Завершающие пробелы. "foo " и "foo" отличаются, если пробелы не игнорируются. Сохранение конфиг-файла, которое обрезает завершающие пробелы, сделает каждую затронутую строку выглядящей изменённой.
- Табы vs пробелы. Переформатирование, меняющее табы на пробелы (или наоборот), делает каждую строку с отступом разной в режиме точного совпадения. Включите Игнорировать пробелы или переформатируйте обе стороны одинаково.
- Byte-order mark (BOM). Файлы, сохранённые как UTF-8 с BOM, начинаются с невидимого . Эта первая "строка" всегда будет выглядеть изменённой при сравнении с файлом без BOM. Удалите BOM в редакторе или hex-редакторе перед вставкой.
- Умные кавычки или неразрывные пробелы. Вставка из текстового процессора может подменить " на " или обычный пробел на неразрывный пробел. Выглядят одинаково, но это разные кодовые точки. Нормализуйте текст до чистого ASCII перед сравнением.
- Различия только в регистре. API и api — разные строки, если не включить Игнорировать регистр. Базовые совпадения по-прежнему показывают исходный текст; ослабляется только сравнение.
Часто задаваемые вопросы
В чём разница между режимами строк и слов?
Режим строк сравнивает текст построчно — если любой символ в строке меняется, вся строка помечается как удалённая из A и добавленная в B. Режим слов разделяет по пробелам и показывает более гранулярный diff, что лучше для прозы. Для исходного кода и конфиг-файлов режим строк почти всегда то, что вам нужно.
Почему одинаковые на вид строки показываются как изменённые?
Обычно одно из трёх невидимых различий: окончания строк (CRLF в Windows vs LF в Unix), завершающие пробелы или byte-order mark (BOM) в начале файла. Включите "Игнорировать пробелы", чтобы пропустить первые два. Для BOM откройте файл в hex-редакторе или удалите ведущие байты перед вставкой.
Он сравнивает посимвольно?
Нет. В режиме строк он сравнивает по строкам; в режиме слов — по токенам, разделённым пробелами. Diff на уровне символов даёт шумный вывод для большинства реальных текстов. Если нужно посимвольное сравнение для коротких строк, вставьте их в режим слов — каждый символ фактически будет собственным токеном, если нет пробелов.
Насколько большими могут быть входы?
Diff работает в памяти, так что практический потолок — RAM вашего браузера. До нескольких MB на сторону работает нормально; десятки MB могут ненадолго заморозить вкладку, потому что рендеринг подсвеченного HTML медленнее, чем сам diff. Для очень больших файлов запускайте diff локально с GNU diff или git diff.
Могу ли я игнорировать регистр или пробелы?
Да — оба переключаются на панели инструментов. "Игнорировать пробелы" рассматривает любую последовательность пробелов как эквивалентную, что удобно для переформатированного кода. "Игнорировать регистр" рассматривает "Hello" и "hello" как одинаковые. Базовые совпадения по-прежнему показывают исходный текст; ослабляется только сравнение.
Сохраняете ли вы текст, который я вставляю в два поля?
Нет. Мы не храним ничего из того, что вы сюда вставляете — ни текст "до", ни текст "после". Всё, что вы сравниваете, удаляется, как только вы закрываете или обновляете страницу. Никаких логов, никакой аналитики по вашему содержимому. Для дополнительной уверенности developer tools вашего браузера покажут, что происходит.