Kdiff3 1c как использовать

Обновлено: 21.11.2024

Те, кто часто обновляют доработанные типовые комплекты, а затем проверяют корректность обновления, сравнивая отчеты о существующих конфигурациях, опасаются, как мешают при этой строке вида "Объект встречается только в первой|второй сбор: 99 - 99", "Изменено: 99 - 99".
Но если вы, как и я, используете эту утилиту KDiff3, то есть простой способ избавиться от таких строк.

Там же присутствуют макросы для Notepad++, алгоритм, который я взял за основу для настройки KDiff3.

Также в несколько строк и не очень внятно (размыто по тексту) об этом сказано на ИТС в Приложении 2 стандарта Технология разветвленной разработки конфигураций.


О процессе собственно обновления конфигураций на поддержку я нашел только:

Перейдем к делу, детали позже.

Если KDiff3 еще не установлен, дистрибутив находится здесь. Последняя версия на момент публикации 0.9.98.
Процесс установки тривиален, на этом останавливаться не будем.

Запускаем KDiff3, в диалоге выбора файлов просто жмем ОК.

Переходим к настройкам:
1. Настройки – Настройка KDiff3…
2. Переходим на вкладку Diff
3. И в поле Команда препроцессора вводит такой текст:

<р>4. Жмем Ок. Готово.

Веди с левой стороны такой текст (надо просто скопипастить):

А с правым – такой:

В результате должно получиться так:

Для сравнения, так что было без настроек:


Как видно, ненужные номера строк заменены на символы ‘N’.
Но если вдруг, что такой же текст встречается в коде, то он принадлежит как есть.

Разберем подробно Команда препроцессора:


Как сказано в документации, файлы, которые мы передаем KDiff3, перед сравнением происходят через препроцессор.
Препроцессор – это полученная команда, указанная в настройке команды препроцессора.
В случае использования такой внешней команды используется утилита sed.exe. Она расположена там же, где и исполняемый файл KDiff3 (у меня в C:\Program Files\KDiff3\bin\).

Т.е. первая часть Команда препроцессора – это вызов утилиты sed.exe.


Утилита воссталась с командой s. Синтаксис этой команды: 's/regexp/replacement/flags'. Подробнее здесь.
В ходе каждого исходного файла утилита ищет фрагменты, во время выражения regexp, и если находит, то заменяет их по правилам, описывает в replacement. Флаги flags мы здесь не используем.
Различные примеры использования команды есть в документации KDiff3.

Самый простой пример: команда 's/EFGH/1234/' заменяет первое вхождение EFGH на 1234.
Попробуйте ввести в командной строке Windows:

Должно получиться:

Команда echo просто выводит текст в стандартный вывод.
А символ '|' перенаправляет вывод чрезмерной команды на вход пользователя.


Пойдем дальше.
Фрагменты вида \xD0\x9E – как вы наверное догадались, это символы кириллицы в кодировке UTF8.
Если бы использовалась sed техническая кириллица, то команда была бы такой:

Теперь, когда буков стало меньше, дальше разобраться будет проще.


Утилита sed может принимать несколько команд. уникальная команда усилена символом ';'. Команды последовательно. Выход становится входом для пользователя (но в случае, если мы эту возможность не используем).
В нашем случае по превышению множества команд:


Разберем только первую. Вторая конструкция аналогична и чуть проще.

Наше выражение regexp (один из вариантов синтаксиса описан здесь) состоит из следующих элементов:

^ – начало строки;
[ \x09]* – 0 или более символов пробела или табуляции в любом размере;
.\+ – 1 или более любых символов;
[0123456789]\+ – 1 или более числовых символов в любом количестве;
$ – конец строки.
Остальные фрагменты используются сами.

Некоторые части выражения regexp могут быть задействованы в скобках \(, \). То, что между шестью скобками, становится самостоятельным подвыражением. исходный текст, найденный с помощью такого подвыражения, запоминается как обратная ссылка. Каждой паре скобок соответствует отдельная обратная связь.Обратные ссылки нумеруются в порядке следования подвыражений слева направо, рядом с 1.
Обратные ссылки можно использовать в выражениях replacement, обращаясь к ним по номерам: \1, < em>\2 и т.д.


Таким образом, мы ищем такие строки, которые:

  • начинаются с нуля или более пробелов или табуляций,
  • вслед за просмотром следует текст "Объект встречается только в",
  • далее 0 или более любых символов, пока не встречавшихся
  • фрагмент "комплект:",
  • далее пробел, число, пробел, '-', пробел, число,
  • и на этой строке обязательно нужно закончиться.

При этом мы запоминаем текст от начала строки до символа ':' как конкретно посилання номер 1.


Если такая строка найдена, она будет заменена в соответствии с выражением replacement: \1 N - N.

Заметно все проще.

Мы подставляем посилання номер 1, т.е. исходную картинку до символа ':', и превратил текст " N - N".

Почему он называется "KDiff3"?

Инструменты под названием "KDiff" и "KDiff2" (теперь называемые "Kompare") уже существуют. Кроме того, "KDiff3" должен предполагать, что он может объединяться, как инструмент "diff3" в наборе Diff-Tool.

Почему я выпустил его под лицензией GPL?

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

Некоторые кнопки и функции отсутствуют. Что не так?

Вы скомпилировали из исходного кода, но, вероятно, не указали правильный префикс KDE при настройке. По умолчанию configure хочет установить в /usr/local, но тогда KDE не может найти файл ресурсов пользовательского интерфейса (например, kdiff3ui.rc). Файл README содержит дополнительную информацию о правильном префиксе.

Часто строки, которые похожи, но не идентичны, появляются рядом друг с другом, но иногда нет. Почему?

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

Почему все конфликты должны быть разрешены, прежде чем можно будет сохранить результат слияния?

Для каждого одинакового или различного раздела редактор в окне результатов слияния запоминает, где он начинается или заканчивается. Это нужно для того, чтобы конфликты можно было решать вручную, просто выбрав кнопку источника (A, B или C). Эта информация теряется при сохранении в виде текста, и создание специального формата файла, поддерживающего сохранение и восстановление всей необходимой информации, требует слишком много усилий.

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

Нажмите на сводную колонку слева от текста. (См. также здесь.)

Почему редактор в окне результатов слияния не имеет функции «отменить»?

До сих пор это требовало слишком много усилий. Вы всегда можете восстановить версию из одного источника (A, B или C), нажав соответствующую кнопку. Для большого редактирования в любом случае рекомендуется использовать другой редактор.

Когда я удалил какой-то текст, то вдруг появилось " " и не может быть удалено. Что это значит и как это убрать?

Для каждого одинакового или различного раздела редактор в окне результатов слияния запоминает, где он начинается или заканчивается. " " означает, что в разделе ничего не осталось, даже символ новой строки. Это может произойти либо при автоматическом слиянии, либо при редактировании. Это не проблема, так как эта подсказка не появится в сохраненном файле. Если вы хотите вернуть оригинальный источник, просто выберите раздел (нажмите на левый столбец сводки), а затем нажмите кнопку источника с необходимым содержимым (A/B или C).

Почему KDiff3 не поддерживает подсветку синтаксиса?

KDiff3 уже использует множество цветов для выделения различий. Большее выделение сбило бы с толку. Используйте для этого другой редактор.

Хотя KDiff3 проанализирует файл любого типа, результат, вероятно, вас не очень удовлетворит.

KDiff3 был создан для сравнения чисто текстовых файлов. OpenOffice, Word, Excel и т.д. хранят в файлах гораздо больше информации (о шрифтах, картинках, страницах, цветах и ​​т.д.), о которой KDiff3 не знает. Таким образом, KDiff3 покажет вам содержимое файла, интерпретированное как чистый текст, но это может быть нечитаемым или, по крайней мере, выглядеть очень странно.

Поскольку в настоящее время большинство программ хранят свое содержимое в формате XML, возможно, вы сможете прочитать его как чистый текст. Так что, если бы изменение было небольшим, KDiff3 все равно мог бы вам помочь.

Лучшее решение, если вы хотите сравнить только текст (без встроенных объектов, таких как изображения), — это использовать «Выбрать все» и «Копировать» в вашей программе, чтобы скопировать интересующий текст в буфер обмена, а затем в KDiff3 вставить текст. в любое окно ввода diff. (См. также раздел Выбор, копирование и вставка.)

Куда исчез параметр каталога "Выводить только дельты"?

В меню каталога теперь есть несколько опций «Показать». Отключение «Показывать одинаковые файлы» приведет к тому, что раньше делало включение «Отображать только дельты».

Как сделать большой выбор в окне ввода различий, если прокрутка занимает так много времени?

Начните выделение как обычно (нажмите и удерживайте левую кнопку мыши). Затем используйте клавиши навигации (например, страница вверх, страница вниз), удерживая левую кнопку мыши нажатой. (См. также раздел Выбор, копирование и вставка.)

Здесь так много информации, но на ваш вопрос до сих пор нет ответа?

Есть ли способ сравнить два выбранных файла из контекстного меню проводника Windows?

4 ответа 4

Это расширение оболочки (diff-ext) позволяет запускать инструмент сравнения файлов для 2 или 3 файлов (в зависимости от инструмента) в одном каталоге или «сохранять» файл(ы) для последующего сравнения. Он действует как внешний список последних использованных (MRU) файлов для инструмента сравнения.

Я использую его с KDiff3, но на странице есть ряд других инструментов сравнения, с которыми его можно использовать.

Плохо работает на моей Windows 7. Я настроил его с путем к diff.exe, и все, что я получаю, это что-то мигающее перед моими глазами. Это приложение вообще знает о различиях?

KDiff3 уже имеет встроенное расширение контекстного меню ( Kdiff3 => Compare ), поэтому, если вам просто нужно что-то быстрое и простое, этого может быть достаточно.

Вот мое решение: добавить пункт контекстного меню, щелкнув правой кнопкой мыши, для запуска пользовательской команды (например, вызова Meld) и сравнения двух файлов.

Предыстория Элементы простого контекстного меню можно легко добавить в реестр Windows (regedit): вручную или путем создания файла .reg (см. пример ниже).

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

  1. Использовать расширения оболочки (сложно)
  2. Убедитесь, что ваше приложение перехватывает разные вызовы (сложные)
  3. Используйте файл singleinstance.exe из обработчика контекстного меню (простой). Эта программа делает вариант 2 для вас. Он собирает аргументы в разное время, когда он вызывается, а затем передает их нужной команде. Опция тайм-аута доступна, чтобы помочь собрать вызовы, которые будут собраны. Перейдите по ссылке, чтобы узнать больше.

Шаг 1 Загрузите singleinstance.exe из контекстного меню-обработчика (и поблагодарите автора, с которым я не связан)

Шаг 2 (для сравнения файлов и папок): Создайте файл с расширением ".reg" со следующим содержимым (пример для объединения со значком):

В reg-файле создается пункт контекстного меню с надписью "Diff It!" для всех файлов (*) и для папок (Folder). Строки, содержащие значок, можно удалить, если он вам не нужен.

Адаптируйте путь к программе singleinstance.exe и запустите команду (здесь C:\Program Files (x86)\Meld\Meld.exe . Обратите внимание на отсутствие пробелов и кавычек

Шаг 3. Запустите файл .reg. Двойной щелчок по нему может сработать, если вы являетесь администратором. В противном случае откройте командную строку администратора в своей папке (в проводнике: «Файл»> «Открыть команду»> «Открыть команду от имени администратора» или «Alt-F-M-A»). Просто введите имя файла .reg, чтобы добавить его в реестр.

Вот и все.

(удалить) Вы можете удалить ключи вручную в реестре или создать файл .reg со следующим содержимым:

Альтернативный вариант. Используйте программное обеспечение для добавления, редактирования и удаления пунктов контекстного меню, например ContextEdit (но не может легко добавить значок). В этом случае вам не нужно экранировать косые черты и кавычки, чтобы команда выглядела так:

Читайте также: