VIM: различие двух разделов в двух файлах, но не весь файл?
7202
Stefan Lasiewski
Я обновил систему с 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 ответа на вопрос
14
Chris Johnsen
Похоже, что linediff.vim может быть тем, что вы хотите: «Выполнить интерактивный анализ на двух блоках текста».
Вы указываете каждый блок (диапазон строк) с помощью его :Linediffкоманды (например :4,10Linediff, или сначала делаете визуальный выбор, затем набираете :Linediff(что получается как :'<,'>LineDiff)). Диапазоны могут быть из одного файла / буфера или разных. После того как вы определили два диапазона, откроется новая вкладка с двумя новыми буферами в режиме сравнения (в разделении) для указанных диапазонов. Вы можете редактировать и :wв любом из этих буферов обновлять исходные диапазоны. Когда вы закончите, :qвыйдите из буферов различий и :LinediffResetизбавьтесь от спецификаторов диапазона в исходных буферах.
Ответ Stackoverflow, где я впервые узнал о linediff.vim также предлагает несколько отображений. В других ответах на этот вопрос также упоминается нестандартное решение и другой плагин, который может решить эту же проблему.
6
garyjohn
Я не нашел действительно простого способа сделать это, но у меня был довольно хороший успех с плагином NrrwRgn (Узкая область), http://www.vim.org/scripts/script.php?script_id=3075 . Это позволяет вам выбрать область буфера и открыть эту область в новом буфере. Вы можете редактировать этот новый буфер, и когда вы закрываете его, плагин автоматически копирует ваш отредактированный текст обратно в область, из которой он пришел в исходном файле. Вы также можете скопировать различные области одного или нескольких файлов в новые буферы, а затем изменить эти новые буферы. Вот как я обычно использую плагин - для проверки различий между похожими функциями, определенными в одном файле.
В вашем случае вы можете открыть оба файла в Vim, а затем использовать Vдля выбора интересующего раздела в первом файле и ввести \nrтекст, чтобы скопировать этот раздел в новый буфер. Повторите для аналогичного раздела в другом файле. Затем в каждом из двух новых буферов выполните :diffthis.
Спасибо! Что будет `\ nr` делать?
Stefan Lasiewski 12 лет назад
0
Плагин карты `nr`, где ``по умолчанию` \\ `- команде плагина, которая копирует выбранную область в новый буфер.
garyjohn 12 лет назад
1
@garyjohn как вы организуете сплит `NrrrRgn`?
dev 7 лет назад
0
@dev: В моей ~ / .vimrc есть две следующие строки конфигурации NrrwRgn: `let g: nrrw_rgn_vert = 1` и` let g: nrrw_rgn_protect = 'n'`. В первом случае NrrwRgn разделяется на левую часть текущего окна. Я забыл, открываются ли они сразу слева или далеко слева. Тем не менее, я больше не использую NrrwRgn для этого, найдя что-то лучшее: Linediff. Он открывает новые регионы в новой вкладке, которая мне кажется более удобной и удобной. Вы можете найти LInediff по адресу `http: //www.vim.org/scripts/script.php? Script_id = 3745` или` https: // github.com / AndrewRadev / linediff.vim`.
garyjohn 7 лет назад
1
Большое спасибо @garyjohn. `NrrwRgn` делает крайний левый или верхний край, что делает сплиты практически неуправляемыми. Я даже попробовал варианты `!`, Но они оказались очень хрупкими (ошибки скрипта + нет чистого способа вернуться к исходному файлу). Я тоже попробую `linediff.vim`, хотя я надеюсь, что в будущем NrrwRgn улучшится.
dev 7 лет назад
0