क्या वर्तमान प्रक्रिया के टैब में git के अंतर के लिए vimdiff शुरू किया जा सकता है?
मान लीजिए कि मेरे पास एक फ़ाइल बफर ओपन है और :terminal
1 टैब पेज में एक स्प्लिट ओपन है। मैं एक नया टैब बनाना चाहता हूं, जहां मैं दौड़ता हूं, vimdiff
लेकिन मेरे पास काफी अंतर है। मैं git difftool HEAD~1
अपनी मौजूदा vim प्रक्रिया में दिखाने की कोशिश कर रहा हूं , बस दूसरे टैब पेज पर।
क्या यह प्लगइन्स के बिना विम 8 पर संभव है?
मुझे यह भ्रम तब होता है जब मैं करता हूं :tab terminal
और फिर दौड़ता हूं git difftool HEAD~1
। हालाँकि, यह एक विम सबप्रोसेस शुरू करता है और मैं इससे बचना चाहूँगा।
इस तरह का प्रश्न: मैं दो मोड में पहले से ही खुले हुए विम्डीफ मोड में कैसे प्रवेश कर सकता हूं? लेकिन गिट भिन्नता के लिए।
जवाब
हालांकि यह निश्चित रूप से वेनिला vim
में उल्लेखनीय हैvim-fugitive , मेरा सुझाव है कि आप tpope के उत्कृष्ट प्लगइन पर एक नज़र डालें । फिर, आपको बस :tab Gdiff
वही करना होगा जो आप चाहते हैं।
यदि आप वास्तव में कोई प्लग-इन स्थापित नहीं करना चाहते हैं, तो निम्नलिखित कार्य कर सकता है मान लें कि वर्तमान फ़ाइल बफर नं में है। 1:
:tabnew | r! git show HEAD^:$(git rev-parse --show-prefix)#1:t
- नए खुले टैब में,
:vert sb 1 | windo diffthis
व्याख्या
- सबसे पहले एक नया टैब खोलता है
tabnew
औरHEAD^
फ़ाइल के संस्करण की सामग्री को बफर 1 में लोड करता है। - एक ऊर्ध्वाधर विभाजन को बफ़र 1 के साथ खोलता है
vert sb 1
, फिर:diffthis
टैब में सभी बफ़र्स को अलग मोड में प्रवेश करने के लिए जारी करता है।
संपादित करें
ओपी ने चरण 1 पर कुछ और स्पष्टीकरण के लिए कहा git show
। उस फॉर्म के इनपुट की जरूरत है <rev>:<path>
जहां <path>
काम करने वाले पेड़ की जड़ के सापेक्ष होना चाहिए। उदाहरण के लिए, यदि बफर 1 में फ़ाइल का पूर्ण पथ /a/b/foo.ext
ऐसा है b
जिसमें आपका .git
फ़ोल्डर (यानी b
आपके रेपो की जड़ है), git show
ठीक से काम करने के लिए आपको इसके साथ आमंत्रित करना होगा HEAD^:b/foo.e
। /a/b/foo.ext
या तो उपयोग करना या foo.ext
काम नहीं करेगा। इसलिए मैं इस उदाहरण में git rev-parse --show-prefix
गिट रूट (जो होगा b/
) के सापेक्ष वर्तमान फ़ोल्डर का पथ प्राप्त करता था ।
फिर, मैंने vim
फ़ाइल के नाम को जोड़ने के लिए पथ विस्तार का उपयोग किया (वह है foo.ext
)। बफर 1 में जो भी फ़ाइल लोड की गई है उसका पथ लाने के लिए #1
कहता vim
है, और :t
"पूंछ" को निकालता है, जो /
कि रास्ते में अंतिम के बाद सब कुछ है #1
। कुछ मामलों में #1
और #1:t
समान हैं, लेकिन यह हमेशा ऐसा नहीं होता है। उदाहरण के लिए, यदि आप दौड़ते vim b/foo.ext
तो बस के बजाय #1
वापस लौट जाते । अधिक जानकारी के लिए देखें ।b/foo.ext
foo.ext
:help expand
बेशक, आप केवल पथ को मैन्युअल रूप से दर्ज कर सकते हैं, जैसे कि :tabnew | r! git show HEAD^:b/foo.ext
, और यह काम करेगा। लेकिन ऊपर दिया गया संस्करण स्क्रिप्ट करने योग्य है या आप किसी मैप पर असाइन कर सकते हैं।