मैं विम की दुनिया में नया हूं, और मैं इसे बनाना चाहता हूं ताकि हर बार जब मैं किसी फाइल को सहेजता हूं तो यह संस्करण नियंत्रण के लिए प्रतिबद्ध होता है। क्या यह संभव है?
मैं विम की दुनिया में नया हूं, और मैं इसे बनाना चाहता हूं ताकि हर बार जब मैं किसी फाइल को सहेजता हूं तो यह संस्करण नियंत्रण के लिए प्रतिबद्ध होता है। क्या यह संभव है?
जवाबों:
आप विम के ऑटोकॉमैंड्स का उपयोग कर सकते हैं:
:autocmd BufWritePost * execute '!git add % && git commit -m %'
यह अप्रयुक्त है लेकिन इसे फ़ाइल को जोड़ना चाहिए और इसे प्रतिबद्ध संदेश के रूप में फ़ाइल नाम के साथ करना चाहिए।
आप BufWritePost चाहते हैं क्योंकि यह फ़ाइल लिखे जाने के बाद चालू हो जाती है। मुझे लगता है कि हालांकि बहुत सारे भद्दे या असुरक्षित किनारे मामले हैं।
मैं एक विम ऑटोकॉम का उपयोग करता हूं, जिसे मैं अपने .vimrc में रखता हूं। कमांड पहले एक क्रैड चेक करता है जो हम एक गिट डायरेक्टरी में काम कर रहे हैं (एक .it डायरेक्ट्री के अस्तित्व की जाँच करके, या तो वर्तमान डाइरेक्टरी में या उपयोग करके git rev-parse
), फिर उपयोग करता है git -a -m %
ताकि केवल पहले जोड़ी गई फ़ाइलों का मंचन और प्रतिबद्ध हो। ।
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
, एक एसओ उत्तर से
दूसरों ने जो उत्तर दिए हैं, उन पर निर्माण:
autocmd BufWritePost * execute ':silent ! if git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m "Auto-commit: saved %"; fi > /dev/null 2>&1'
यह पूरी तरह से पारदर्शी है। आपको "प्रेस एन्टर टू कंटिन्यू" संदेश नहीं मिलेगा (लेकिन अगर काम नहीं किया गया, तो आप यह नहीं जान पाएंगे कि यह विफल हो गया है)।
आप निश्चित रूप से इस मैक्रो को सफेद कर सकते हैं या कमांड रीमैपिंग के साथ।
( Https://stackoverflow.com/questions/117150/can-i-re-map-commands-in-vim चेक करें )
मुझे यकीन नहीं है कि यह एक अच्छा विकल्प है। मैं अब के लिए git में कुशल नहीं हूँ और मुझे पता है कि यह कभी-कभी svn से अलग है। लेकिन मैं svn के साथ यह ऑटो कमिट नहीं करूंगा। कमिटमेंट को सार्थक करने की जरूरत है और नियमित समय पर कुछ बचत करने की नहीं।
आप आम तौर पर प्रतिबद्ध करते हैं क्योंकि आपने एक फ़ंक्शन जोड़ा, एक बग तय किया, ... सिर्फ इसलिए नहीं कि आपने एक फ़ाइल पर काम किया। आप गैर संकलित परियोजना या अधूरे कार्य के साथ समाप्त नहीं होंगे।
मुझे पता है कि यह सवाल पुराना है और यह स्पष्ट रूप से आत्म-प्रचार है, लेकिन मैंने एक विम प्लगइन लिखा है जो विशिष्ट विम autocmd
घटनाओं के बाद चलाने के लिए कुछ शेल स्क्रिप्ट को ट्रिगर करेगा । उदाहरण के लिए, .bufwritepost.vimhook.sh
हर बार BufWritePost
कमांड को निकाल दिया जाता है , नाम की स्क्रिप्ट (सिंक्रोनस) चलाई जाएगी। फिर आप आसानी से उस स्क्रिप्ट के अंदर गिट कमिट करने के लिए जो भी तर्क चाहते हैं, शामिल कर सकते हैं। प्लगइन इन लिपियों के विशिष्ट नामकरण सम्मेलनों को मानता है और "हुक" लिपियों का भी समर्थन करता है जो केवल कुछ नामों से मेल खाने वाली फाइलों पर ट्रिगर होती हैं या कुछ एक्सटेंशन होती हैं।
पूरी जानकारी: https://github.com/ahw/vim-hooks
मैं इस समस्या पर अपनी रिपोर्ट दर्ज करना चाहता हूं।
मेरे पास vimrc.vim
एक git रिपॉजिटरी में है ( $VIMCONF
बूटस्ट्रैप .vimrc के साथ), और <Leader>ve
नए टैब में vimrc खोलने के लिए मैप किया गया ("vim edit")। यह वर्तमान कार्यशील निर्देशिका को प्रभावित नहीं करता है।
इसलिए यदि मैं vimrc.vim
अपने vim git रिपॉजिटरी के बाहर एक अलग निर्देशिका में शुरू किए गए vim से संपादित करता हूं , तो निक एडवर्ड्स द्वारा जिस दृष्टिकोण पर चर्चा की गई थी, वह विफल हो जाएगा। मेरी हैक निम्नलिखित है (विंडोज़ और लिनक्स के लिए)
if has('win32')
" The git command has to be passed to git. So we need to call bash.exe.
autocmd BufEnter *vimrc.vim silent! lcd %:p:h
autocmd BufWritePost *vimrc.vim if expand('<amatch>') =~ substitute(expand('$VIMCONF\vimrc.vim'), '\', '/', "g") | execute '! git add % & git commit -m %' | endif
else " Linux
autocmd BufWritePost *vimrc.vim
\ if expand('<amatch>') =~ expand($VIMCONF)."/vimrc.vim" |
\ let tempdir = getcwd() | execute 'cd' fnameescape(expand('<amatch>:h')) |
\ execute '! if git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m % ; fi' |
\ execute 'cd' fnameescape(tempdir) |
\ endif
endif
स्पष्टीकरण:
git
पथ में होना चाहिए (यानी आपको टाइप करने git <ENTER>
में सक्षम होना चाहिए cmd.exe
)tempdir
टिप्पणियाँ:
|
। यदि कोई भी आदेश विफल हो जाता है तो श्रृंखला निरस्त हो जाएगी। कई लाइनों को तोड़ने के लिए अगली पंक्ति के साथ शुरू करें \
।*.vim
औरexpand($VIMCONF)."/ftplugin/"