Консольный инструмент сравнения/отличия файлов

Я ищу что-то, что я могу установить на сервер Ubuntu, что позволит мне сравнивать содержимое PHP, Javascript, CSS, HTML и других текстовых файлов более презентабельным и понятным способом, чем команда по умолчанию diff.

Должны быть

  • Параллельное сравнение содержимого файла с указанием строк, которые отличаются от файла 1 к файлу 2.
  • Запуск из консоли (окружение рабочего стола не установлено)
  • Поддержка простых текстовых файлов

Хотел бы иметь

  • Цвета, используемые для выделения изменений
  • Синхронизированная прокрутка (строки обоих файлов остаются рядом и видны, когда вы перемещаетесь по сравнению)
  • Индикация изменений в строке (например, сравнение строк «вопрос» и «это вопрос» укажет / подчеркнет, что «это» является разницей, в отличие от простого указания всей строки как наличия в ней чего-то другого )

В идеале мне бы понравилось что-то вроде функции сравнения файлов WinMerge:WinMerge

для Ubuntu, но я понимаю, что не все функции могут быть доступны для консольного приложения.

Ответы (3)

вимдифф

vimdiff file1 file2

Вы также можете использовать его с git, например:

git difftool --tool=vimdiff HEAD^ HEAD

вимдифф

Итак, вам нужен интерактивный инструмент сравнения с очень простыми функциями. Очевидный ответ — Emacs (Ubuntu :) emacs, который включает Ediff около 20 лет назад.

Откройте два файла, которые вы хотите сравнить, и выберите в меню «Инструменты → Сравнить (Ediff) → Два буфера…». Или выберите «Инструменты → Сравнить (Ediff) → Два файла…» и введите имена файлов. Вместо этого вы можете использовать команду ediff-buffersили ediff(псевдоним ediff-files) (нажмите Alt+ X, затем введите ediffи нажмите Enter). Основные команды в режиме Ediff:

  • |для переключения между отображением двух файлов один над другим (по умолчанию) или рядом
  • nдля перехода к следующему другому блоку строк
  • pдля перехода к предыдущему другому блоку строк
  • qвыйти из режима Ediff
  • ?за помощью
  • C-x o( Ctrl+ Xзатем нижний регистр O) для навигации между тремя буферами (файл 1, файл 2 и панель управления Ediff).

Ediff также может выполнять трехсторонние сравнения, если у вас есть общий файл-предок, и может помочь в слиянии. Записей в меню «Инструменты» должно быть достаточно, чтобы начать работу; подробности см. в руководстве .

Emacs также может автоматически извлекать версии из svn и других систем контроля версий. Посмотрите в меню «Инструменты → Контроль версий» или в руководстве для получения дополнительной информации.

Вам может быть удобнее использовать версию Emacs с графическим интерфейсом. Emacs работает во всех основных операционных системах (в Windows я использую EmacsW32 ) и может прозрачно получать доступ к удаленным файлам через SSH (и другие методы). Чтобы открыть удаленный файл через SSH, введите /name-of-host:/path/to/fileимя файла. В Windows, если вы используете PuTTY для SSH, убедитесь, что вы plinkустановили и на Emacs PATH, и вставили (setq tramp-default-method "plink")свой файл ~/.emacs. Подробнее см. в руководстве Tramp .

Если вам нравится, diffно вы хотите, чтобы он был немного более легким для понимания и чтения, есть colordiff- в основном то же самое, diffно с цветным выделением.

Чтобы получить параллельное сравнение с использованием diff или colordiff, вы можете добавить -yопцию. Вы также можете использовать sdiff- он выводит параллельное сравнение немного чище, чем diffс -yопцией (по крайней мере, в Fedora, в Debian они выглядят почти одинаково, хотя не уверен, что это одинаково для всех).

Он выделяет разные слова, а не всю строку.

Вы также можете установить ширину столбца терминала в соответствии с вашей текущей шириной/столбцами:

colordiff -y --width=$COLUMNS mylovelyfile1.txt mylovelyfile2.txt