यह ओपी द्वारा पूछे जाने की तुलना में थोड़ा अधिक व्यापक है, लेकिन लोग प्लगइन्स का उपयोग नहीं करना चाहते हैं, और संभवतः अन्य संशोधन नियंत्रण प्रणाली, यह थोड़ा स्निपेट काफी अच्छी तरह से काम करता है:
:new
:r! git show branch:file
:1d
यह एक नई विंडो बनाता है और दिए गए कमांड के आउटपुट को नए बफर में पढ़कर फाइल को दिखाता है। यह निश्चित रूप से किसी भी बाहरी कमांड के साथ काम करता है, न कि केवल गिट।
Bzr के लिए उदाहरण (जहां REV सिंटैक्स एक शाखा निर्दिष्ट कर सकता है):
:new
:r! bzr cat -r REV file
:1d
Hg के लिए उदाहरण (hg में शाखाओं के बारे में निश्चित नहीं है; इसका पर्याप्त उपयोग न करें)
:new
:r! hg cat -r REV file
:1d
Svn के लिए उदाहरण (
:new
:r! svn cat file@REV
:1d
आप अभी भी एसओ पदों की तरह सिंटैक्स हाइलाइटिंग प्राप्त करने के लिए फ़िलाटाइप सेट करना चाहते हैं, लेकिन कम से कम आपको पाइपिंग के साथ गड़बड़ करने की ज़रूरत नहीं है।
एक बार खोलने के बाद आप इसे एक नए नाम के साथ :w filename
या इसके :saveas filename
बाद से सहेज सकते हैं , क्योंकि विम के लिए अभी तक इसका कोई फ़ाइल नाम नहीं होगा। यदि आप इसे संपादित करने में सक्षम नहीं होना चाहते हैं, तो आप एक :setlocal readonly
और / या में भी फेंक सकते हैं :setlocal nomodifiable
।
-Edit: स्वचालित फ़िल्टर
यह थोड़ा अधिक काम है, लेकिन आप विम को फिल्म के साथ अनुमान लगाने के लिए कह सकते हैं
:filetype detect
लेकिन, चूंकि विम का अभी तक कोई नाम नहीं है, यह हमेशा अच्छी तरह से काम नहीं करता है (उदाहरण के लिए, मैंने कुछ सी कोड में खींचा और यह अनुमान लगाया गया filtype=conf
।
हम इसे सहेजकर एक नाम दे सकते हैं, लेकिन हम संभवतः मौजूदा फ़ाइल को अधिलेखित नहीं करना चाहते हैं। हम केवल फ़ाइल नाम भी सेट कर सकते हैं (धन्यवाद @PeterRincker!), लेकिन फिर से, हम टकरावों का जोखिम नहीं उठाना चाहते हैं। चूँकि यह संभावना नहीं है कि एक फाइल मौजूद है जो ब्रांचनाम और फाइलनेम दोनों एक साथ है, हम उन्हें कुछ विपरीत परीक्षक के साथ समेटेंगे
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
जहां "file"
वास्तविक फ़ाइल नाम और "branch"
शाखा नाम के साथ प्रतिस्थापित किया गया है
बेशक, इस बिंदु पर हम लगभग एक प्लगइन लिख रहे हैं; ;-)
यह सब एक साथ करना, यहाँ यह एक विशिष्ट कार्य के रूप में है जिसे आप अपने vimrc में छोड़ सकते हैं:
function! GitFile(branch,file)
new
exe "silent r! git show " . a:branch . ":" . a:file
1d
exe "silent file " . a:branch . "-" . a:file
filetype detect
setlocal readonly "don't allow saving
setlocal nomodified "allow easy quitting without saving
setlocal nomodifiable "don't allow modification
endfunction
जिसे आप कमांड में लपेट सकते हैं या सीधे कॉल कर सकते हैं जैसे call GitFile("whateverBranch","myfile.c")
। आपको एक बफर नाम की एक नई विंडो मिलेगीwhateverBranch-myfile.c