GitHub .vimrc और plugins के लिए


21

मुझे पता है कि बहुत से लोग अपने .vimrc को GitHub पर स्टोर करते हैं ताकि नई मशीनों पर काम करना सही हो सके, और इससे मुझे पूरा एहसास होता है। हालाँकि, प्लगइन्स को शामिल करना समस्याग्रस्त है, क्योंकि मेरे द्वारा उपयोग किए जाने वाले प्लगइन्स पहले ही गिट रिपॉजिटरी हैं। कोई कैसे एक रेपो बनाता है जो उनके .vimrc और किसी भी प्लगइन्स को ट्रैक करेगा जो स्थापित किया जा सकता है?


मुझे ऐसा लगता है कि यह बहुत राय-उन्मुख हो सकता है; कोई उद्देश्य "सर्वश्रेष्ठ" नहीं है और बहुत सारे अच्छे विकल्प हैं, प्रत्येक अपने स्वयं के पेशेवरों और विपक्षों के साथ। इसके अलावा बिट विशेष रूप से नेस्टेड रिपॉजिटरी के बारे में सवाल "गिट का उपयोग करके" श्रेणी में अधिक लाता है और विम के बारे में कम है। शायद अगर आप एक विशेष समस्या पर ध्यान केंद्रित करते हैं, तो आपके पास जिम्प पर अपने कॉन्फ़िगरेशन को संग्रहीत करने की कोशिश करते समय विम या विम प्लग के साथ था?

3
मैं बाहर निकालने के लिए इसे संपादित कर सकते सबसे अच्छा है अगर आप की तरह; मेरा इरादा "मैं यह कैसे करूँ?" सवाल है, जबकि स्वीकार करते हैं कि जिस तरह से मैं समस्या के बारे में सोच रहा था वह आदर्श नहीं हो सकता है।
टॉम

यह मदद कर सकता है, लेकिन यह सिर्फ एक "चीजों की सूची" सवाल बना सकता है ( प्रभावी रूप से ऐसा करने के लिए अलग-अलग तरीकों के बहुत सारे हैं, फिर से)। वर्तमान में ऐसे प्रश्नों के बारे में मेटा पर एक विषय है यदि आप इस बारे में चर्चा में योगदान करना चाहते हैं कि हमें इस तरह के प्रश्न का कैसे व्यवहार करना चाहिए।

2
संपादित। मुझे आशा है कि मैंने इसे और अधिक स्पष्ट कर दिया है कि मैं पूछ रहा हूं "मैं यह कैसे करूं?"
टॉम

1
बस neobundle की तरह एक प्लगइन प्रबंधक का उपयोग करें।
फिलिप

जवाबों:


18

रिपॉजिटरी से निपटने के लिए कैसे-रिपॉजिटरी के साथ एक निरंतर सवाल किया गया है। ट्रैक को बनाए रखने के लिए थोड़ी और जटिलता जोड़ने की कीमत पर, गिट के सबमॉड्यूल्स स्थिति को संबोधित करने का एक तरीका है। Git साइट में सबमॉड्यूल का परिचय है

मूल विचार यह है कि आपकी रिपॉजिटरी में एक पथ से जुड़े अन्य गिट रिपॉजिटरी का संदर्भ रखा जाए। ये संदर्भ .gitmodulesआपकी रिपॉजिटरी की जड़ में एक फ़ाइल में संग्रहीत हैं (जिसे गिट द्वारा प्रबंधित किया जाता है, इसलिए इसे अकेला छोड़ दें)। रेपो क्लोनिंग करते समय कुछ जटिलताएँ आती हैं, जिसमें सबमॉड्यूल्स होते हैं: आपको फ़ाइल git submodule initबनाने के लिए स्पष्ट रूप से .gitmodules, और फिर git submodule updateसबमॉड्यूल्स को क्लोन करना होगा।


यहाँ बताया गया है कि मैं अपने dotfiles रिपॉजिटरी में एक नया vim प्लगइन कैसे जोड़ूंगा (मैंने ~/.vim/इस रेपो को aliased किया है .vim/) सबमॉड्यूल का उपयोग करके:

$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir

इसके बाद submodule add, एक git statusऐसा दिखाएगा कि आपने .gitmodulesफ़ाइल को संशोधित (या बनाया) किया है, कुछ इस तरह से:

[submodule ".vim/bundle/vim-elixir"]
    path = .vim/bundle/vim-elixir
    url = https://github.com/elixir-lang/vim-elixir.git

इसे .vim/bundle/vim-elixirनई फाइल के रूप में भी दिखाना चाहिए । Git उस पथ को विशेष रूप से अब व्यवहार करता है: यह आपकी फ़ाइल सिस्टम पर एक सामान्य निर्देशिका है (इसलिए इसे सामान्य रूप से लोड करता है), लेकिन git diffइसे अपनी रिपॉजिटरी से एक विशिष्ट प्रतिबद्ध के रूप में व्यवहार करेगा। जब उस पथ (जैसे git log -1 -u .vim/bundle/vim-elixir) के लिए अंतर या लॉग को देखते हैं , तो git इसे इस तरह एक-पंक्ति स्ट्रिंग के रूप में दिखाएगा:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

प्लगइन के नवीनतम संस्करण के लिए अद्यतन सबमॉड्यूल के रिपॉजिटरी में जाने और एक नई कमेटी की जाँच करने से संबंधित है, और फिर आपकी रिपॉजिटरी के लिए प्रतिबद्ध है :

$ cd .vim/bundle/vim-elixir
$ git remote -v            # note: the submodule repo's origin, not my repo's
origin  https://github.com/elixir-lang/vim-elixir.git (fetch)
origin  https://github.com/elixir-lang/vim-elixir.git (push)

$ git pull
# ...

$ cd -     # back to my repository's root
$ git status
# ...
    modified:   .vim/bundle/vim-elixir (new commits)

$ git diff .vim/bundle/vim-elixir
# ...
-Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
+Subproject commit d59784e7afbd0d55c501e40c43b57cbe6f6e04c2

$ git commit -m "update vim-elixir" .vim/bundle/vim-elixir

धन्यवाद, यह उसी तरह दिखता है जैसे मैं देख रहा था!
टॉम

आह, मैंने देखा कि आपका जवाब पोस्ट नहीं किया गया था, क्योंकि मैं कुछ समय के लिए मेरा संपादन कर रहा था।
मूरू

23

आपको अपने VCS में प्लगइन्स को संग्रहीत करने की आवश्यकता नहीं है; तुम भी एक विम पैकेज प्रबंधक का उपयोग कर सकते हैं। कल से, मैं विम-प्लग का उपयोग करता हूं :

आप अपने vimrc में प्लगइन्स को इस तरह परिभाषित कर सकते हैं:

call plug#begin('~/.vim/plugged')

Plug 'embear/vim-localvimrc'
Plug 'kchmck/vim-coffee-script'
" ... etc

call plug#end()

फिर विम को पुनरारंभ करें, और उसके बाद प्लग इन को स्थापित करें:

:PlugInstall

या, आप कॉल से पहले इस स्निपेट को FAQ से अपनी vimrc फ़ाइल में जोड़ सकते हैं plug#begin():

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall
endif

यह प्लगइन्स को अंदर रखेगा ~/.vim/pluggedआपको इस फ़ाइल को अपने VCS में रखने की आवश्यकता नहीं है । यदि आप किसी अन्य मशीन पर इस vimrc का उपयोग करना चाहते हैं, तो बस :PlugInstallउस मशीन पर कॉल करें ।

प्लगइन हटाने के लिए, इसे vimrc फ़ाइल से निकालें और चलाएँ:

:PlugClean

ध्यान दें कि विम-प्लग, स्क्रिप्ट स्क्रिप्ट वेबसाइट से स्क्रिप्ट्स को स्थापित करने का समर्थन नहीं करता है, लेकिन उन स्क्रिप्ट्स को GitHub पर दिखाया गया है , इसलिए ऐसा करने की कोई आवश्यकता नहीं है।

इसके कुछ अतिरिक्त फायदे भी हैं जैसे कि बेहतर तरीके से प्लगइन को अपडेट करना, और बेहतर प्रदर्शन के लिए ऑन-डिमांड लोडिंग। आप अपनी vimrc फ़ाइलों के साथ वितरित किए जा रहे प्लगइन्स की लाइसेंस शर्तों का उल्लंघन करने का जोखिम भी नहीं उठा रहे हैं।

यह भी देखें:


5

मैं गितुब में अपने विम्मक को संग्रहीत करता हूं और मेरी रिपॉजिटरी के सबमॉड्यूल के रूप में प्लगइन्स।

Readme.md फ़ाइल में मैंने एक लाइनर लगाया जो रिपॉजिटरी को खींचता है फिर सेटअप स्क्रिप्ट चलाता है, इस तरह मैं एक संपादक में एक लाइन कॉपी कर सकता हूं और यह सब कुछ सेट करता है। यह सिर्फ vim (लेकिन ज्यादा नहीं) की तुलना में थोड़ा अधिक करता है।

https://github.com/Loki-Astari/UnixConfig

इसके प्रयेाग के लिए:

cd
git clone git@github.com:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd

पुनश्च। कोई भी सलाह लेने की इच्छा करना (जैसा कि मैंने यह उम्र पहले किया था और तब से इसे नहीं छुआ है)।

नोट: मेरा पसंदीदा हिस्सा यह है कि यह गिट को भी सेट करता है और सेट को गिट के लिए उपकरण के रूप में उपयोग करने के लिए सेट करता है। Vimdiff सबसे अच्छा उपकरण है।


5

यदि आप पैथोजन के साथ रहना चाहते हैं, तो एक तरीका गिट सबमॉड्यूल का उपयोग करना हो सकता है । जब आप एक सबमॉड्यूल जोड़ते हैं, तो git इसे किसी अन्य रिपॉजिटरी से पहचानता है और अपनी सामग्री को अकेला छोड़ देता है (जब तक कि इसे बदल नहीं दिया गया हो, इस स्थिति में, यह आपके द्वारा किए जाने पर अनियोजित सामग्री के रूप में दिखाई देगा git status)। यदि आप अपने Github- आधारित सभी प्लग इन हैं bundle/, तो उन्हें सबमॉडल्स के रूप में जोड़ना एक अच्छा शेल के साथ एक काफी सरल कार्य है:

for f in bundle/*/ 
do 
    git submodule add $(awk '/url =/{print $3}' "$f/.git/config") "$f"
done

तुम कैसे submodules मेरे vimrc रेपो में दिखा सकते हैं पर एक नज़र है ।


यदि आप किसी फ़ाइल को एक सबमॉड्यूल में जोड़ते हैं, या कुछ परिवर्तन करते हैं जो रिपॉजिटरी को प्रभावित नहीं करते हैं, git statusतो भी सबमॉड्यूल के बारे में शिकायत करेंगे जिसमें बिना परिवर्तन किए हुए बदलाव या अनियोजित फाइलें हैं। आप फ़ाइल ignore = dirtyमें सबमॉड्यूल कॉन्फ़िगरेशन को जोड़कर ऐसे परिवर्तनों को अनदेखा कर सकते हैं .gitmodules। उदाहरण के लिए:

[submodule "bundle/LaTeX-Box"]
    path = bundle/syntastic
    url = https://github.com/scrooloose/syntastic.git
    ignore = dirty

सबमॉड्यूल्स का एक लाभ यह है कि सबमॉड्यूल के संशोधन को जीआईटी रिपॉजिटरी में जोड़ा जाता है, ताकि git initस्वचालित रूप से उस विशेष संशोधन की जांच करने का ख्याल रखा जा सके। जब आप फ़ाइल ignore = allमें उनके कॉन्फ़िगरेशन को जोड़कर उन्हें जोड़ लें, तो आप उसे दूर फेंक सकते हैं और सबमॉडल्स को अनदेखा करने के लिए उन्हें बता सकते हैं .gitmodules। उदाहरण के लिए:

[submodule "bundle/LaTeX-Box"]
    path = bundle/LaTeX-Box
    url = https://github.com/LaTeX-Box-Team/LaTeX-Box.git
    ignore = all

अंत में, उन सभी को अद्यतन करने के लिए एक आदेश!

git submodule foreach git pull

शब्द सावधानी: मैं सबमॉड्यूल के लिए नया हूं। मुझे वास्तव में यकीन नहीं है कि वे कैसे व्यवहार करते हैं।


विम-महामारी सबमॉड्यूल्स का उपयोग करने की आवश्यकता के बिना रोगज़नक़ को बढ़ाने का एक और तरीका है। महामारी रनटाइमपथ को संभालने के लिए पैथोजेन छोड़ने वाले रिमोट रिपॉजिटरी को संभालती है। इसका मतलब यह है कि किसी को दो उपकरणों की आवश्यकता है, लेकिन अलग-अलग कार्यों के लिए जिन्हें "अलग से" संभालना चाहिए।
जालनाब

क्या कोई इस बारे में टिप्पणी कर सकता है कि रोगज़नक़ की रीडमी में टपोप क्यों कह सकता है कि सबमॉड्यूल जाने का रास्ता क्यों नहीं है? मुझे या तो सबमॉड्यूल्स का पता नहीं है (और मेरा समाधान मेरे लिए भी बहुत अच्छा काम करता है एक प्लगइन मैनेजर के बिना), लेकिन मैं अनुमान लगा रहा हूं कि एंटी-सबमॉड्यूल भीड़ में कुछ दिलचस्प है।
डैश-टॉम-बैंग

1
@ डैश-टॉम-बैंग मैंने उस बिट को नहीं पढ़ा है क्योंकि वह कहती है कि आपको सबमॉड्यूल का उपयोग नहीं करना चाहिए। मुझे लगता है कि वह सिर्फ यह कह रहा है कि यह उसका पसंदीदा तरीका नहीं है।
रिच

1
टीबीएच का उपयोग करने के कुछ वर्षों के बाद, मैं सबमॉड्यूल से परेशान हो गया। मैं अब इनके इस्तेमाल के खिलाफ सिफारिश करूंगा। मैं अब विम-प्लग का उपयोग करता हूं और यह केवल मेरे जीवन को आसान बनाता है।
मुरु

4

आप अपने .gitignoreसभी प्लगइन्स को अनदेखा करने और उन्हें प्रतिबद्ध न करने के लिए बस इस लाइन को अपने साथ जोड़ सकते हैं:

vim/bundle

इसके अलावा, आपने कहा था कि यह समस्याग्रस्त है कि इसमें प्लगइन कोड शामिल होगा क्योंकि वे पहले से ही गितूब रेपो हैं। मुझे लगता है कि आप का मतलब है कि आप कोड की नकल नहीं करना चाहते हैं, लेकिन मैंने सुना है कि आपको आगे जाना चाहिए और डुप्लिकेट कोड को एक निर्भरता चाहिए ताकि आप हमेशा अपने कोड में किसी विशेष बिंदु पर वापस जा सकें और यह जान सकें कि यह काम करेगा। यहाँ जेम्स शोर द्वारा कुछ लेख दिए गए हैं जो इस बारे में बात करते हैं: http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle । वह प्रोग्रामिंग कोड और npm (vim के विपरीत) के बारे में बात कर रहा है, लेकिन मुझे लगता है कि तर्क अभी भी लागू होता है, आप कोड या लिखने के लिए एक विश्वसनीय वातावरण चाहते हैं।


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