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), который я недавно опубликовал?