VIM: различие двух разделов в двух файлах, но не весь файл?

Я обновил систему с Nagios 2 до Nagios 3, и теперь я сравниваю некоторые различия в старых и новых файлах конфигурации.

В конфигурационные файлы внесены существенные изменения, и я не хочу выполнять diff для всего файла, потому что vimdiff показывает мне слишком много несущественных различий и имеет проблемы с # комментарии в начале строк и т. д.

Могу ли я использовать vim или vimdiff-подобную функциональность для выполнения сравнения двух отдельных разделов в двух разных файлах?

Например, я хочу различать только строки, которые выглядят примерно так:

# Define a service to check the load on the local machine. 

define service{
    use                             local-service         ; Name of service template to use
    host_name                       localhost
    service_description             Blah Blah
    check_command                   Blah Blah
    }

3 ответа

Похоже, что linediff.vim может быть тем, что вы хотите: "Выполнить интерактивный анализ на двух блоках текста".

Вы указываете каждый блок (диапазон строк) с его :Linediff команда (например, :4,10Linediffили сначала выполните визуальный выбор, затем введите :Linediff (который выходит как :'<,'>LineDiff)). Диапазоны могут быть из одного файла / буфера или разных. После того, как вы указали два диапазона, откроется новая вкладка, в которой есть два новых буфера в режиме сравнения (разделенных) для указанных диапазонов. Вы можете редактировать и :w в любом из этих буферов, чтобы обновить исходные диапазоны. Когда вы сделали, :q из буферов различий и :LinediffReset избавиться от спецификаторов диапазона в исходных буферах.

Ответ Stackoverflow, в котором я впервые узнал о linediff.vim, также предлагает несколько сопоставлений. В других ответах на этот вопрос также упоминается нестандартное решение и другой плагин, который может решить эту же проблему.

Я не нашел действительно простого способа сделать это, но у меня был довольно хороший успех с плагином NrrwRgn (Узкая область), http://www.vim.org/scripts/script.php?script_id=3075. Это позволяет вам выбрать область буфера и открыть эту область в новом буфере. Вы можете редактировать этот новый буфер, и когда вы закрываете его, плагин автоматически копирует ваш отредактированный текст обратно в область, из которой он пришел в исходном файле. Вы также можете скопировать различные области одного или нескольких файлов в новые буферы, а затем изменить эти новые буферы. Вот как я обычно использую плагин - для проверки различий между похожими функциями, определенными в одном файле.

В вашем случае вы можете открыть оба файла в Vim, а затем использовать V выбрать интересующий раздел в первом файле и набрать \nr скопировать этот раздел в новый буфер. Повторите для аналогичного раздела в другом файле. Затем в каждом из двух новых буферов выполните :diffthis,

Как насчет spotdiff.vim ( http://www.vim.org/scripts/script.php?script_id=5509), который я недавно опубликовал?

Другие вопросы по тегам