.Vimrc ve eklentiler için GitHub


21

Birçok makinenin yeni makinelerde çalışmayı kolaylaştırmayı kolaylaştırmak için .vimrc'lerini GitHub'da sakladığını biliyorum ve bu bana çok mantıklı geliyor. Ancak eklentileri de dahil etmek sorunlu çünkü kullandığım eklentiler zaten git depoları. Biri hem .vimrc hem de kurulabilecek eklentileri izleyecek bir repoyu nasıl oluşturur?


Bunun fikir odaklı olabileceğini düşünüyorum; nesnel bir "en iyi" yok ve her biri kendi lehte ve aleyhte olan birçok iyi seçenek var. Ayrıca, özellikle yuvalanmış havuzlarla ilgili bit, soruyu "git" kategorisini ve vim hakkında daha az şey ifade ediyor. Belki de konfigürasyonunuzu github'ta saklamaya çalışırken vim veya vim eklentileri ile ilgili belirli bir soruna odaklandıysanız?

3
İsterseniz en iyisini almak için onu düzenleyebilirim ; niyetim daha fazla "bunu nasıl yaparım?" sormaktı. soru, soruna devam etmeyi düşündüğüm tarzın ideal olmayabileceğini kabul ederken.
Tom,

Bu yardımcı olabilir, ancak bu onu sadece “bir şeyler listesi” sorusu haline getirebilir (yine, bunu etkili bir şekilde yapmanın birçok farklı yolu vardır). Bu tür bir soruyu nasıl ele almamız gerektiği konusundaki tartışmaya katkıda bulunmak istiyorsanız , şu anda bu tür sorular hakkında meta üzerinde bir konu var .

2
Düzenlenen. Umarım, "Bunu nasıl yaparım?" Diye sorduğumda daha açık ifade ettim.
Tom,

1
Sadece neobundle gibi bir eklenti yöneticisi kullanın.
Philip

Yanıtlar:


18

Havuz içi havuzlarla nasıl başa çıkılacağı, git ile devam eden bir sorudur. Git'in alt modülleri , takip edilmesi gereken biraz daha karmaşıklık eklemek pahasına, durumu ele almanın bir yoludur. Git sitesi alt modüller için bir giriş var .

Temel fikir, deponuzdaki bir yolla ilişkili başka bir git deposuna referans tutmaktır. Bu referanslar, deponuzun .gitmoduleskök dizinindeki bir dosyada saklanır (ki bunlar git tarafından yönetilir, bu nedenle onu yalnız bırakın). Karmaşıklığın bir kısmı, alt modülleri olan bir repoyu klonlarken devreye giriyor: dosyayı git submodule initoluşturmak için .gitmodulesve sonra git submodule updateda alt modülleri klonlamak için açıkça kullanmalısınız .


İşte bir submodule kullanarak dotfiles deposuna ( ~/.vim/bu repoya takma işlem yaptım) yeni bir vim eklentisini nasıl ekleyeceğim konusunda bir yol gösterici .vim/:

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

Bundan sonra submodule add, bir dosya aşağıdaki gibi bir şeyle git statusdeğiştirilmiş (veya oluşturulmuş) .gitmodules:

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

Ayrıca .vim/bundle/vim-elixiryeni bir dosya olarak göstermelidir . Git şu yolu özel olarak ele alıyor: dosya sisteminizdeki normal bir dizin (vim normal şekilde yüklüyor), ancak git diffdeposundan belirli bir taahhüt olarak görecek. Bu yol için dif ya da loglara bakarken (ör. git log -1 -u .vim/bundle/vim-elixir) Git git bunu şöyle bir satırlık gösterecektir:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

Eklentinin en son sürümüne güncellemek, alt modülün deposuna girmeye ve yeni bir işlemi kontrol etmeye ve ardından bunu deponuza teslim etmeye karşılık gelir :

$ 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

Teşekkürler, bu aradığım bir şeye benziyor!
Tom,

Ah, cevabınızın gönderildiğini fark etmedim, çünkü bir süredir benimkileri düzeltiyordum.
muru

23

Eklentileri VCS'nizde saklamanıza gerek yoktur; Vim paket yöneticisini de kullanabilirsiniz. Dünden beri vim-plug kullanıyorum :

Vimrc'nizdeki eklentileri şöyle tanımlayabilirsiniz:

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

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

call plug#end()

Sonra Vim'i yeniden başlatın ve ardından eklentileri şu şekilde yükleyin:

:PlugInstall

Veya bu snippet'i SSS’den plug#begin()aramadan önce vimrc dosyanıza ekleyebilirsiniz :

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

Bu eklentileri koyacaktır ~/.vim/plugged. Bu dosyayı VCS'nizde tutmanıza gerek yoktur . Bu vimrc'i başka bir makinede kullanmak istiyorsanız, sadece :PlugInstallbu makineyi arayın .

bir eklentiyi kaldırmak için, onu vimrc dosyasından kaldırın ve çalıştırın:

:PlugClean

Vim-plug'ın Vim script web sitesinden script yüklemesini desteklemediğini, ancak bu scriptlerin GitHub'a yansıtıldığını , dolayısıyla buna gerek kalmayacağını unutmayın.

Eklentinin daha kolay güncellenmesi ve daha iyi performans için talep üzerine yükleme gibi bazı ek avantajlar da vardır. Ayrıca, vimrc dosyalarınızla dağıttığınız eklentilerin lisans koşullarını ihlal etme riski taşımazsınız.

Ayrıca bakınız:


5

Vimrc'imi github'da ve eklentilerde depomun alt modülleri olarak saklıyorum.

Readme.md dosyasında depoyu çeken bir liner koydum, sonra kurulum komut dosyasını çalıştırın, bu şekilde bir satırı bir editöre kopyalayabilirim ve her şeyi ayarlar. Sadece vim'den biraz daha fazlasını yapar (ama fazla değil).

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

Kullanmak için:

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

PS. Herhangi bir tavsiyede bulunmaya istekli (bunu yıllar önce yaptığım ve o zamandan beri ona dokunmadığım gibi).

Not: En sevdiğim kısım, git'i de ayarladığı ve vim'i git için diff aracı olarak kullanacağı şekilde ayarlamak. Vimdiff en iyi fark aracıdır.


5

Eğer Patojen'e bağlı kalmak istiyorsanız, Git alt modüllerini kullanmak bir yol olabilir . Bir alt modül eklediğinizde, git başka bir havuzdan geldiğini tanır ve içeriğini tek başına bırakır (değiştirilmediği sürece, bu durumda, yaptığınızda izlenmemiş içeriğe sahip olarak görünecektir git status). Tüm Github tabanlı eklentileriniz varsa, bundle/bunları alt modüller olarak eklemek iyi bir mermi ile oldukça basit bir iştir:

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

Alt modüllerin vimrc depomda nasıl göründüğüne bir göz atabilirsiniz .


Bir alt modüle bir dosya eklerseniz veya depoyu etkilemeyen bazı değişiklikler yaparsanız git status, hala değişiklik yapmayan veya izlenmeyen dosyaların bulunduğu alt modülden şikayetçi olur. Git dosyasında ignore = dirtyalt modül yapılandırmasına ekleyerek bu tür değişiklikleri görmezden yapabilirsiniz .gitmodules. Örneğin:

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

Alt modüllerin bir yararı, alt modülün revizyonunun git deposuna eklenmesidir, böylece git initotomatik olarak belirli bir revizyonun kontrol edilmesini sağlar. Bunu fırlatabilir ve git'e ignore = all, .gitmodulesdosyadaki yapılandırmalarına ekleyerek bunları ekledikten sonra alt modülleri yoksaymasını söyleyebilirsiniz . Örneğin:

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

Son olarak, hepsini güncellemek için bir komut!

git submodule foreach git pull

Dikkatli kelime: Ben alt modüller için yeni. Nasıl davrandıklarından tam olarak emin değilim.


vim-pandemic , alt modülleri kullanmaya gerek kalmadan Patojeni geliştirmenin başka bir yoludur. Pandemik, runtimepath ile başa çıkmak için Patojen'den ayrılan uzak depoları idare eder. Bu, birinin iki araca ihtiyacı olduğu anlamına gelir, ancak "ayrı ayrı" yapılması gereken farklı işler için.
jalanb

Patojen benioku içerisindeki tpope'un neden submodüllerin gitmenin yolu olmadığını söyleyebileceğini kimse söyleyebilir mi? Alt modülleri de bilmiyorum (ve benim çözümüm benim için bir eklenti yöneticisi olmadan bile harika çalışıyor) ama anti-alt modülün kalabalığının söyleyeceği ilginç bir şey olduğunu tahmin ediyorum.
dash-tom-bang,

1
@ onu şeklindeki sözleri bunu biraz okumaz çizgi-tom-bam sen submodules kullanmamalısınız. Bence sadece o değil diyerek düşünüyorum onun tercih edilen yöntem.
Zengin

1
TBH onları kullandıktan birkaç yıl sonra, alt modüller ile rahatsız oldum. Şimdi onları kullanmaya karşı tavsiye ederim. Şimdi vim-plug kullanıyorum ve bu sadece hayatımı kolaylaştırdı.
muru

4

.gitignoreTüm eklentilerinizi yoksaymak ve taahhüt etmemek için bu satırı size ekleyebilirsiniz :

vim/bundle

Ayrıca, zaten eklenti kodları olduğundan, eklenti kodunu eklemenin sorunlu olduğunu söylediniz. Sanırım kodu kopyalamak istemediğinizi söylüyorsunuz, ancak devam etmeniz ve bir bağımlılık olan kodu kopyalamanız gerektiğini, böylece kodunuzdaki belirli bir noktaya her zaman geri dönüp bilmeniz gerektiğini söylemiştim. Çalışacak. İşte James Shore'un bu konuda konuştuğu bazı makaleler: http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . Programlama kodu ve npm'den (vim'in tersine) bahsediyor, ancak iddia hala geçerli, kodlamak veya yazmak için güvenilir bir ortam istiyorum.


1
“Bu satırı .vimrc'nize ekleyebilirsiniz ...” demek istediniz .gitignore?
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.