vim: दो फ़ाइलों में दो खंडों को अलग करें, लेकिन संपूर्ण फ़ाइल को नहीं?


14

मैंने Nagios 2 से Nagios 3 में एक सिस्टम अपग्रेड किया है, और अब मैं पुराने और नए कॉन्फ़िगरेशन फ़ाइलों में कुछ अंतरों की तुलना कर रहा हूं।

कॉन्फ़िगरेशन फ़ाइलों में महत्वपूर्ण परिवर्तन हैं, और मैं संपूर्ण फ़ाइल पर एक भिन्न प्रदर्शन नहीं करना चाहता हूं क्योंकि 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
    }

जवाबों:


19

ऐसा लगता है कि linediff.vim हो सकता है कि आप क्या चाहते हैं: "पाठ के दो ब्लॉकों पर एक इंटरैक्टिव अंतर करें"।

आप प्रत्येक ब्लॉक (लाइन रेंज) को इसके :Linediffकमांड के साथ निर्दिष्ट करते हैं (उदाहरण के लिए :4,10Linediff, या पहले दृश्य चयन करें, फिर टाइप करें :Linediff(जो कि बाहर आता है :'<,'>LineDiff)। पर्वतमाला एक ही फ़ाइल / बफर या विभिन्न लोगों से हो सकती है। एक बार जब आप दो रेंज निर्दिष्ट करते हैं, तो यह एक नया टैब खोलता है जिसमें दो नए, अलग-अलग मोड में बफर (एक विभाजन में) निर्दिष्ट रेंज के लिए हैं। आप :wमूल सीमाओं को अपडेट करने के लिए इन बफ़र्स में से किसी में भी संपादन कर सकते हैं। जब आप किए जाते हैं, :qतो अलग-अलग बफ़र्स से बाहर निकलते हैं और :LinediffResetमूल बफ़र्स में रेंज स्पेसर्स से छुटकारा पाने के लिए।

Stackoverflow जवाब जहां मैं पहली बार linediff.vim के सीखा भी मैपिंग के एक जोड़े पता चलता है। उस प्रश्न के अन्य उत्तरों में एक कस्टम समाधान और एक अन्य प्लगइन का भी उल्लेख किया गया है जो इसी मुद्दे को संबोधित कर सकते हैं।


6

मुझे ऐसा करने के लिए वास्तव में सीधा रास्ता नहीं मिला है, लेकिन मुझे NrrwRgn (संकीर्ण क्षेत्र) प्लगइन, http://www.vim.org/scripts/script.php?script_id=3075 के साथ बहुत अच्छी सफलता मिली है । यह आपको एक बफर के क्षेत्र का चयन करने देता है और उस क्षेत्र को एक नए बफर में खोलता है। आप उस नए बफर को संपादित कर सकते हैं और जब आप इसे बंद करते हैं, तो प्लगइन स्वचालित रूप से आपके संपादित पाठ को उस क्षेत्र में वापस आ जाता है जो मूल फ़ाइल से आया था। आप एक या अधिक फ़ाइलों के विभिन्न क्षेत्रों को नए बफ़र्स में भी कॉपी कर सकते हैं, फिर उन नए बफ़र्स को अलग कर सकते हैं। इसी तरह मैं आमतौर पर प्लगइन का उपयोग करता हूं - एक फ़ाइल में परिभाषित समान कार्यों के बीच अंतर की जांच करने के लिए।

आपके मामले में, आप विम में दोनों फाइलें खोल सकते हैं, फिर Vपहली फाइल में रुचि के अनुभाग का चयन करने के लिए उपयोग करें और \nrउस अनुभाग को एक नए बफर में कॉपी करने के लिए टाइप करें। अन्य फ़ाइल में समान अनुभाग के लिए दोहराएं। फिर प्रत्येक दो नए बफ़र्स में, निष्पादित करें :diffthis


धन्यवाद! क्या करेगा \nr?
स्टीफन लासवर्स्की

1
प्लगइन मैप्स <Leader>nr, जहां <Leader>एक नए बफर में चयनित क्षेत्र को कॉपी करने वाले प्लगइन कमांड को `\ 'में डिफॉल्ट करता है।
garyjohn

@garyjohn आप NrrrRgnविभाजन को कैसे व्यवस्थित करते हैं ?
देव

1
@देव: मेरी ~ / .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 NrrwRgnदूर छोड़ दिया या ऊपर है, जो विभाजन बहुत अधिक असहनीय बनाता है। मैंने भी !वेरिएंट की कोशिश की, लेकिन वे बहुत नाजुक साबित हुए (स्क्रिप्ट की त्रुटी + मूल फ़ाइल में वापस आने का कोई साफ तरीका नहीं)। भविष्य में भी सुधार की linediff.vimआशा करते हुए भी एक कोशिश दूंगा NrrwRgn
देव

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.