मर्ज टूल के रूप में विम का उपयोग करते समय "दोनों को लेने" का एक तरीका है?


11

मैं विम को 3-तरफ़ा मर्ज के रूप में भी उपयोग कर रहा हूं और कभी-कभी स्थानीय और दूरस्थ दोनों शाखाओं से परिवर्तन लेने की आवश्यकता होती है। kdiff3कुंजी प्रेस के एक जोड़े के साथ ऐसा कर सकते हैं, वहाँ विम में ऐसा करने का एक तरीका है?

जवाबों:


6

जैसा आपने पूछा था वैसा नहीं, लेकिन यह उपयोगी हो सकता है: स्प्लिट प्लगइन: तीन-तरफा मर्ज के दौरान संघर्षों को हल करने के लिए एक विम प्लगइन । यह Vimeo पर एक अच्छा डेमो स्क्रैंकास्ट है

यदि आप डिफ़ॉल्ट vimdiff के साथ छड़ी करने जा रहे हैं, तो आप सरेंडर करने वाली खिड़कियों के लिए बफर नंबर प्राप्त करने के लिए एक फ़ंक्शन बना सकते हैं और उन्हें :diffgetदो बार कॉल करने के लिए उपयोग कर सकते हैं :

                            *:diffg* *:diffget*
:[range]diffg[et] [bufspec]
        Modify the current buffer to undo difference with another
        buffer.  If [bufspec] is given, that buffer is used.  If
        [bufspec] refers to the current buffer then nothing happens.
        Otherwise this only works if there is one other buffer in diff

(...)

The [bufspec] argument above can be a buffer number, a pattern for a buffer
name or a part of a buffer name.  Examples:

    :diffget        Use the other buffer which is in diff mode
    :diffget 3      Use buffer 3
    :diffget v2     Use the buffer which matches "v2" and is in
                diff mode (e.g., "file.c.v2")

आप उन्हें इस फ़ंक्शन में कॉल का उपयोग करने के लिए मैपिंग का उपयोग कर सकते हैं kdiff3

आप इस विमकास्ट के बारे में अधिक जानकारी पा सकते हैं ।


3

yak और put बिना किसी प्लगइन्स या अतिरिक्त फ़ंक्शन के काम कर सकते हैं, हालाँकि यह, शायद, dgया की तुलना में थोड़ा सुविधाजनक हैdp

बस मूल बफ़र्स से आवश्यक बिट्स की प्रतिलिपि बनाएँ और मर्ज किए गए बफ़र में सही स्थान पर चिपकाएँ। यह भी उपयोगी है अगर आप पूरी चीज़ के बजाय एक अलग ब्लॉक का हिस्सा चाहते हैं।

आपको कई बार, विम को अलग-अलग हाइलाइटिंग को अपडेट करने के लिए मजबूर करने की आवश्यकता हो सकती है :diffupdate


1

एक ही कमांड में टार्गेट और मर्ज ब्रांच दोनों से बदलावों को संयोजित करने के लिए:

आप बस गिट संघर्ष मार्करों के साथ लाइनों को हटा सकते हैं। निम्नलिखित दो विधियाँ उन सभी लाइनों को हटा देंगी जो इसके साथ शुरू होती हैं:

<<<<<<<
=======
>>>>>>>

विधि 1: मैन्युअल रूप से एक कमांड दर्ज करना और निष्पादित करना

:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d

विधि 2: एक उपयोगकर्ता निर्धारित आदेश को लागू करना

"Delete all Git conflict markers
"Creates the command :GremoveConflictMarkers
function! RemoveConflictMarkers() range
  echom a:firstline.'-'.a:lastline
  execute a:firstline.','.a:lastline . ' g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d'
endfunction
"-range=% default is whole file
command! -range=% GremoveConflictMarkers <line1>,<line2>call RemoveConflictMarkers()

विम अंतर और विसरित केवल एक शाखा या दूसरे का चयन करेंगे। तो ऊपर दिए गए एक के अलावा एकमात्र वास्तविक समाधान मैन्युअल रूप से yank है और दोनों फाइलों से काम की प्रतिलिपि में पेस्ट करना है।


यदि आप नीचा दिखाने जा रहे हैं तो एक कारण दें।
user3751385

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