LINUX.ORG.RU

Текстовые редакторы с возможностью сравнения файлов

 , ,


1

1

Существуют ли для Linux текстовые редакторы со сравнением уже открытых во вкладках текстовых файлов с визуализацией отличий (пусть через плагин, можно без объединения), запускаемым посредством клавиатурного сочетания? Отдельных софтин навалом: kompare, meld, diffuse, vdiff. Но это отдельные приложения. Есть Komodo Edit, но он выводит результат в виде «diff».

Из известных мне подобных редакторов для windows - Notepad++, RJ TextEd. Там можно вовремя работы с текстовыми файлами в любой момент ткнув shortcut узнать «что же я натворил, братцы?».

Для Linux существует notepadqq, который позиционируется как «замена» Notepadd++, только плагинов к нему что-то пока не видно. Из Gedit можно было как-то вызывать Meld, но при этом второй файл всё равно нужно было открывать через файловый диалог (или нет?). Примерно такое же поведение, емнип, было у Kate из KDE3 и KDE4, а в Kate из Plasma5 непонятно как встроить запуск Kompare.

В Atom compare выглядит крайне странно (inline?). Как обстоят дела в VS Code для произвольных текстовых файлов?

★★★★★

vim.

Сравнить файлы [g]vim -d file1 file2.

Сравнить текущий буфер (уже открытый) с другим (тоже открытый) :diffthis в нужных буферах.

В emacsOS тоже наверно есть подобное, но там нет текстового редактора.

anonymous
()

есть в vim,emacs,sublime. Последний рекомендую. очень удобное сравнение с подсветкой и доп. инфой. Решение из коробки ctrl+shift+p -> diff files или выделяем оба файла в боковом меню и diff files

q13
()
Ответ на: комментарий от anonymous

Сравнить файлы [g]vim -d file1 file2.

Тоже самое я могу сделать как kompare file1 file2 и кучей остальных подобных программ.

Сравнить текущий буфер (уже открытый) с другим (тоже открытый) :diffthis в нужных буферах.

Имеется ввиду «окно», которое уже в режиме splitview, вызванное например, командой «Ctrl+W v»? Имеется ввиду, что в каждом из таких половинок нужно набрать :diffthis? А если файлы открыты в разных вкладках?

В Linux до него не доберусь никак, но в windows в gvim отвратительная работа «из коробки» с файлами содержащими кириллицу. По умолчанию в кириллической раскладке не работают клавиши навигации и переходы в режимы редактирования. Само редактирование тоже работает так себе, например, нельзя удалить слово командой dw, если оно набрано кириллическими символами - удалит только один символ, а с латиницей отработает нормально.

grem ★★★★★
() автор топика
Ответ на: комментарий от anonymous

спасибо, ediff попробую посмотреть.

q13, на sublime меня жаба душит :)

e1nste1n, спасибо. А shortcut есть или просто есть возможность его привязать? Выглядит так, словно нужно отдельно каждый файл тыкать мышой. Жаль «жирновато» приложение, но может привыкну.

grem ★★★★★
() автор топика
Ответ на: комментарий от grem

А если файлы открыты в разных вкладках?

Логическая единица - буфер. А как он там разделён и на каких вкладках не имеет значения. И да - необязательно файл. Можно просто в пустой буфер вставить текст и сравнить с другим (либо пустым либо файлом).

anonymous
()
Ответ на: комментарий от e1nste1n

Угу, можно указать комбинацию для «Сравнить активный файл с...» - при последующем вызове появится выпадающий список.

grem ★★★★★
() автор топика
Ответ на: комментарий от Psych218

Можешь описать последовательность действий для двух открытых в разных вкладках файлов?

grem ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Открыл файлы в двух вкладках: ":e file1.txt", затем ":tabnew file2.txt". После этого в каждой из вкладок выполнил ":diffthis" - оба «пометились» для сравнения, но самого сравнения не вижу.

grem ★★★★★
() автор топика
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Это делается в vim командой :[vert] diffsplit <имя> файла>

Вместо имени можно указать каталог (например .) и налазить нужный файл в обзоре.

anonymous
()
Ответ на: комментарий от anonymous

Но опять же второй файл нужно снова открыть :(

Можно ещё для двух уже открытых в splitview сделать ":windo diffthis", чтобы для каждого не писать ":diffthis" ещё и переключаясь между «окошками» для написания второй команды.

Ещё можно сначала в открытом окошке набрать ":Vex" - это разделит буфер на две вертикальных половинки и там откроется фаловый менеджер в текущей директории. А после уже запустить сравнение.

grem ★★★★★
() автор топика
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Кстати да. Оказывается diff локален для таба что бы можно было несколько параллельных сравнений проводить. Сам не знал.

anonymous
()

Интеграция Gedit и Meld описана здесь. В целом работает для версии 2.30.4, появляется меню выбора открытых документов и пункт выбора другого файла, но при двойном клике или нажатии Enter на выбранном файле срабатывает с ошибкой, так как почему-то дублирует путь. Чтобы сработало, нужно выбрать файл и нажать кнопочку «OK».

grem ★★★★★
() автор топика

Acme. Пишешь в буфер diff $F1 $F2 => выделяешь => тыкаешь колёсико. Можно написать шелл-скрипт, чтобы это было компактнее — одной командой. И можно использовать любую другую удобную тебе программу.

Но это отдельные приложения

Это хорошо, не стоит городить комбайн из, казалось бы, текстового редактора.

commagray ★★★★★
()
Последнее исправление: commagray (всего исправлений: 2)
Ответ на: комментарий от blitz

Ничоси! «даже» mcшный сравнитель показывает различие на конце файла, даже если, блядь, сказано игнорировать концы строк и пробелы.

Нет уж. Я на meld посижу. Там хотя бы плюсы есть.

anonymous
()
Ответ на: комментарий от blitz

Я забываю проверить срабатывает ли там отмена для merge по ctrl+u и редактировние, насколько я понял возможно для одного файла. Не знаю как на редактирование второго переключиться. Ну и пока я разобрался, что сравнивать нужно не выделенные файлы, а те, которые были под курсором перед вызовом сравнения... и чтобы они были в разных панелях, разумеется.

grem ★★★★★
() автор топика
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Редактируются оба файла - или left F4 или right Shift-F4.

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

Merge - вот с этим не смог разобраться. Наверное, не там искал help.

blitz
()
Ответ на: комментарий от anonymous

Блиц и meld попробует непредвзято. Но мне кажется, это для достаточно длинных файлов, с историей и под X?

blitz
()
Ответ на: комментарий от commagray

Это хорошо, не стоит городить комбайн из, казалось бы, текстового редактора.

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

grem ★★★★★
() автор топика
Ответ на: комментарий от grem

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

bodqhrohro_promo
()
Ответ на: комментарий от grem

так можно скатиться до отдельного приложения для печати тестового файла

Небо, небо ещё не видело более меркантильного пацака.

lpr

anonymous
()

Visual Studio Code отлично сравнивал все, что я ему скармливал.

ravdinve
()
Последнее исправление: ravdinve (всего исправлений: 1)

Хоть это и прискорбно, но среди бесплатных приложений описанной хотелке в виде готового решения пока отвечает только VSCode. Там нужно только настроить shortcut, чтобы не указывать мышкой что с чем сравнивать. Жаль, что сам редактор для тех же целей немного жирноват.

Более менее ещё работает интеграция gedit с meld. Чтобы скрипт не вываливал ошибку «GtkDialog mapped without a transient parent. This is discouraged» в «Tool output» при запуске скрипта вызова meld, то я подправил в нём строчку с вызовом zenity (чтобы он вываливал предупреждения в «2>/dev/null»):

#!/bin/sh
TITLE="Compare With..."
TEXT="Compare $GEDIT_CURRENT_DOCUMENT_NAME with:"
BROWSE=" browse..."
FILE=
while [ -z "$FILE" ]; do
        FILE=`zenity --list --title="$TITLE" --text="$TEXT" --width=640 --height=320 --column=Documents $GEDIT_DOCUMENTS_PATH "$BROWSE" 2>/dev/null`
        if [ "$FILE" == "$BROWSE" ]; then
                FILE=`zenity --file-selection --title="$TITLE" --filename="$GEDIT_CURRENT_DOCUMENT_DIR/"`
        elif [ -z "$FILE" ]; then
                exit 
        fi
done
meld "$GEDIT_CURRENT_DOCUMENT_DIR/$GEDIT_CURRENT_DOCUMENT_NAME" "$FILE" &

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

В Kate уже несколько лет не поддерживается плагин External Tools, поэтому запускать из него Kompare, Meld или другую внешнюю утилиту сейчас не получится :(

grem ★★★★★
() автор топика

jEdit имеет возможность сравнивать файлы через плагин JDiff (требует наличия установленного плагина CommonControls). Shortcut можно назначить в настройках, например, для действия «DualDiff».

grem ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.