Intereting Posts
Какова символическая переменная для «общего адреса»? Пакетное переименование "case duplicates" Проблема с sudoing ssh – `sudo ssh …` не работает Регистрируется ли Linux при запуске процесса и назначается ему PID? Где я могу найти этот журнал? CentOS 6.5 необходимо вручную добавить маршрут по умолчанию эквивалентно «cpusets» для gpu's Что такое «подрезы»? конвертировать изображения в pdf: как сделать PDF-страницы того же размера ipsec rightsubnet для широкого, не может переопределить таблицу маршрутизации | IPSec маршрутизирует некоторые пакеты «локально», а не через туннель; ip xfrm изменить? Как найти и заменить содержимое для нескольких файлов в текущем каталоге с помощью сценария оболочки или Linux? Как связать arduino как фиксированное блок-устройство – / dev / ttyACM0? На 13.10 графический шрифт периодически зависает после последних обновлений Измените пароль для многих учетных записей одновременно в Gnome Keyring не удалось установить kde-nm-connection-editor на элементарной ОС Luna В чем разница между w и W в режиме эвакуации vim?

diff – отображение измененных строк в разных разделах, чем вставленные строки

(Я сталкиваюсь с этим в контексте использования vimdiff, который полагается на интерпретатор diff и интерпретирует его, поэтому я думаю, что это вопрос diff).

Учитывая эти файлы, первый имеет 2 строки, второй имеет 4, diff (GNU 3.3) показывает полные файлы.

< 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 12.99 < 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 37.44 --- > 09/02/2014 | Expenses : Advertising | Closed | | 12.99 | 12.99 > 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 0.00 > 09/03/2014 | Expenses : Advertising | Closed | | 24.45 | 24.45 > 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 0.00 

Это означает, что vimdiff видит, что это фактически не общий контент. Как показано в верхней части рисунка ниже, он показывает соответствие первых 13 символов в строке 1, первые 4 строки 2 и видит строки 3 и 4 как новые.

Я провожу много времени в этой ситуации, добавляя новые строки вместо вставленных строк, чтобы заставить diff (и, в свою очередь, vimdiff) показать его как середину рисунка ниже.

Есть ли способ сделать diff, чтобы разбить это лучше, поэтому vimdiff увидит это как нижнюю часть изображения? (Что я сделал Photoshop.)

Для этого потребуется 4 секции, а не 1, показанные выше. Что-то вроде:

 #,#c#,# --- > 09/02/2014 | Expenses : Advertising | Closed | | 12.99 | 12.99 #,#c#,# < 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 12.99 --- > 09/02/2014 | CFCU Checking | PAYPAL | 12.99 | | 0.00 #,#c#,# --- > 09/03/2014 | Expenses : Advertising | Closed | | 24.45 | 24.45 #,#c#,# < 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 37.44 --- > 09/03/2014 | CFCU Checking | PAYPAL | 24.45 | | 0.00 

Кстати, vimdiff может использовать разные опции diff, используя diffexpr , но требует diffexpr умолчанию (я думаю, называется ed ).

Итак, я думаю, что я ищу, чтобы сделать diff, не смешивая измененную строку и вставленную строку в том же разделе.

Примеры vimdiff

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

  • В командной строке diff вы сделаете это с помощью опции -C .
  • С помощью vimdiff вы будете делать это с diffopt параметра diffopt и context функции, например, это неявное значение по умолчанию:
     set diffopt = filler, context: 6

и вы можете изменить это, например,

     set diffopt + = context: 9
     set diffopt = filler, context: 9

Кроме этого:

  • базовая утилита diff не может обнаружить, что линии взаимозаменяемы друг относительно друга.
  • а также не имеет возможности сравнивать файлы, игнорируя некоторые столбцы.

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

В принципе вы можете использовать параметр diffexpr и построить скрипт, который предварительно / diffexpr ваши данные, чтобы сравнить только определенные столбцы. Я использовал этот подход некоторое время назад, чтобы сделать утилиту сравнения в свободном формате (word-level). Но делать это – довольно много работы, а не просто из-за неспособности diff игнорировать столбцы его ввода.