GitHub untuk .vimrc dan plugins

21

Saya tahu banyak orang menyimpan .vimrc mereka di GitHub untuk membuatnya lebih mudah untuk bekerja dengan mesin baru, dan itu masuk akal bagi saya. Termasuk plugin, bagaimanapun, bermasalah, karena plugin yang saya gunakan sudah git repositori. Bagaimana cara membuat repo yang akan melacak .vimrc dan plugin apa pun yang mungkin diinstal?

Tom
sumber
Saya merasa ini mungkin terlalu berorientasi pada pendapat; tidak ada tujuan "terbaik" dan ada banyak pilihan bagus, masing-masing dengan pro dan kontra sendiri. Juga sedikit spesifik tentang repositori bersarang membawa pertanyaan lebih ke dalam kategori "using git" dan lebih sedikit tentang vim. Mungkin jika Anda berfokus pada masalah tertentu yang Anda miliki dengan vim atau vim plugins ketika mencoba menyimpan konfigurasi Anda di github?
3
Saya dapat mengeditnya untuk mengambil yang terbaik jika Anda suka; niat saya adalah untuk bertanya lebih banyak tentang "bagaimana saya melakukan ini?" pertanyaan, sambil mengakui bahwa cara saya berpikir tentang menyelesaikan masalah mungkin tidak ideal.
Tom
Itu mungkin membantu, tetapi itu hanya membuatnya menjadi pertanyaan "daftar hal" (ada, sekali lagi, banyak cara berbeda untuk melakukan ini secara efektif). Saat ini ada topik tentang meta tentang pertanyaan seperti itu jika Anda ingin berkontribusi dalam diskusi tentang bagaimana kita harus memperlakukan pertanyaan semacam ini.
2
Diedit. Saya harap saya sudah membuatnya lebih jelas bahwa saya bertanya "bagaimana saya melakukan ini?"
Tom
1
Cukup gunakan pengelola plugin seperti neobundle.
Philip

Jawaban:

18

Bagaimana menangani repositori-dalam-repositori telah menjadi pertanyaan berkelanjutan dengan git. Submodules Git adalah salah satu cara mengatasi situasi, dengan mengorbankan menambahkan sedikit lebih banyak kerumitan untuk melacak. Situs git memiliki pengantar submodul .

Ide dasarnya adalah untuk menyimpan referensi ke repositori git lain yang terkait dengan path di repositori Anda. Referensi-referensi ini disimpan dalam file .gitmodulesdi root repositori Anda (yang dikelola oleh git, jadi biarkan saja). Beberapa kerumitan muncul saat kloning repo yang memiliki submodul: Anda harus secara eksplisit git submodule initmembuat .gitmodulesfile, dan kemudian git submodule updatemengkloning submodul.


Berikut ini adalah langkah-langkah tentang bagaimana saya akan menambahkan plugin vim baru ke repositori dotfiles saya (saya telah ~/.vim/alias untuk repo ini .vim/) menggunakan submodule:

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

Setelah itu submodule add, a git statusakan menunjukkan bahwa Anda telah memodifikasi (atau membuat) .gitmodulesfile, dengan sesuatu seperti ini:

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

Itu juga harus ditampilkan .vim/bundle/vim-elixirsebagai file baru. Git memperlakukan jalur itu secara khusus sekarang: ini adalah direktori normal pada sistem file Anda (jadi vim memuatnya secara normal), tetapi git diffakan memperlakukannya sebagai komit khusus dari repositori. Ketika melihat diffs atau log untuk path tersebut (misal git log -1 -u .vim/bundle/vim-elixir), git akan menampilkannya sebagai string satu baris seperti ini:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

Memperbarui ke versi terbaru dari plugin terkait dengan masuk ke repositori submodule dan memeriksa komit baru, dan kemudian melakukan itu ke repositori Anda:

$ 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
alxndr
sumber
Terima kasih, sepertinya itu yang saya cari!
Tom
Ah, saya tidak melihat jawaban Anda telah diposting, karena saya sedang mengedit jawaban saya untuk beberapa waktu.
muru
23

Anda tidak perlu menyimpan plugin di VCS Anda; Anda juga dapat menggunakan manajer paket Vim. Sejak kemarin, saya menggunakan vim-plug :

Anda dapat mendefinisikan plugin di vimrc Anda seperti:

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

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

call plug#end()

Kemudian mulai ulang Vim, lalu instal plugin dengan:

:PlugInstall

Atau, Anda dapat menambahkan potongan ini dari FAQ ke file vimrc Anda sebelum plug#begin()panggilan:

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

Ini akan memasukkan plugin ~/.vim/plugged. Anda tidak perlu menyimpan file ini di VCS Anda . Jika Anda ingin menggunakan vimrc ini di komputer lain, panggil saja :PlugInstallmesin itu.

untuk menghapus plugin, hapus dari file vimrc dan jalankan:

:PlugClean

Perhatikan bahwa vim-plug tidak mendukung pemasangan skrip dari situs skrip Vim, tetapi skrip-skrip tersebut dicerminkan pada GitHub , jadi tidak perlu melakukannya.

Ada juga beberapa keuntungan tambahan untuk ini seperti pembaruan plugin yang lebih mudah, dan pemuatan sesuai permintaan untuk kinerja yang lebih baik. Anda juga tidak menjalankan risiko melanggar persyaratan lisensi dari plugin yang Anda distribusikan dengan file vimrc Anda.

Lihat juga:

Martin Tournoij
sumber
5

Saya menyimpan vimrc saya di github dan plugins sebagai submodules dari repositori saya.

Dalam file readme.md saya meletakkan satu liner yang menarik repositori kemudian menjalankan skrip setup, dengan cara ini saya bisa menyalin satu baris ke editor dan mengatur semuanya. Itu sedikit lebih dari sekedar vim (tapi tidak banyak).

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

Untuk menggunakannya:

cd
git clone [email protected]:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd

PS. Bersedia menerima saran apa pun (seperti yang saya lakukan ini berabad-abad lalu dan belum menyentuhnya sejak itu).

Catatan: Bagian favorit saya adalah mengatur git juga dan mengaturnya untuk menggunakan vim sebagai alat diff untuk git. Vimdiff adalah alat diff terbaik.

Martin York
sumber
5

Jika Anda ingin tetap menggunakan Patogen, salah satu caranya adalah dengan menggunakan submit Git . Ketika Anda menambahkan submodule, git mengenalinya sebagai dari repositori lain dan meninggalkan isinya sendiri (kecuali jika sudah diubah, dalam hal ini, ia akan terlihat memiliki konten yang tidak terlacak saat Anda melakukannya git status). Jika Anda memiliki semua plugin berbasis Github bundle/, maka menambahkannya sebagai submodul adalah tugas yang cukup sederhana dengan shell yang bagus:

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

Anda dapat melihat bagaimana submodules muncul di repo vimrc saya .


Jika Anda menambahkan file ke submodule, atau membuat beberapa perubahan yang tidak mempengaruhi repositori, git statusmasih akan mengeluh bahwa submodule memiliki perubahan yang tidak dikomit atau file yang tidak dilacak. Anda dapat membuat git mengabaikan perubahan tersebut dengan menambahkan ignore = dirtyke konfigurasi submodule dalam .gitmodulesfile. Sebagai contoh:

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

Salah satu manfaat dari submodula adalah bahwa revisi dari submodule ditambahkan ke repositori git, sehingga secara git initotomatis mengurus memeriksa revisi tertentu. Anda dapat membuangnya dan memberi tahu git untuk mengabaikan submodul setelah Anda menambahkannya dengan menambahkan ignore = allkonfigurasi mereka dalam .gitmodulesfile. Sebagai contoh:

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

Terakhir, satu perintah untuk memperbarui semuanya!

git submodule foreach git pull

Peringatan: Saya baru mengenal submodul. Saya tidak begitu yakin bagaimana mereka berperilaku.

muru
sumber
pandemi vim adalah cara lain untuk meningkatkan Patogen tanpa perlu menggunakan submodul. Pandemi menangani repositori jarak jauh meninggalkan Pathogen untuk menangani runtimepath. Ini berarti seseorang membutuhkan dua alat, tetapi untuk tugas yang berbeda yang "harus" ditangani secara terpisah.
jalanb
Adakah yang bisa mengomentari mengapa tpope dalam readme patogen mungkin mengatakan mengapa submodul bukan cara untuk maju? Saya juga tidak tahu submodula (dan solusi saya bekerja sangat bagus untuk saya tanpa bahkan seorang manajer plugin) tapi saya menduga kerumunan anti-submodule memiliki sesuatu yang menarik untuk dikatakan.
dash-tom-bang
1
@ dash-tom-bang Saya tidak membaca sedikit itu karena dia mengatakan bahwa Anda tidak harus menggunakan submodules. Saya pikir dia hanya mengatakan itu bukan nya metode yang disukai.
Rich
1
TBH setelah beberapa tahun menggunakannya, saya merasa jengkel dengan submodul. Sekarang saya akan merekomendasikan untuk tidak menggunakannya. Saya menggunakan vim-plug sekarang dan itu hanya membuat hidup saya lebih mudah.
muru
4

Anda bisa menambahkan baris ini ke Anda .gitignoreuntuk mengabaikan semua plugin Anda dan tidak melakukannya:

vim/bundle

Juga, Anda mengatakan itu bermasalah karena akan memasukkan kode plugin karena mereka sudah repo github. Saya kira maksud Anda adalah bahwa Anda tidak ingin menggandakan kode, tetapi saya telah mendengarnya mengatakan bahwa Anda harus melanjutkan dan menduplikasi kode yang merupakan ketergantungan sehingga Anda selalu dapat kembali ke titik tertentu dalam kode Anda dan tahu bahwa ini akan bekerja. Berikut adalah beberapa artikel oleh James Shore yang berbicara tentang itu: http://www.letscodejavascript.com/v3/blog/2014/12/the_r reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . Dia berbicara tentang kode pemrograman dan npm (sebagai lawan dari vim), tapi saya pikir argumennya masih berlaku, Anda ingin lingkungan yang dapat diandalkan untuk kode atau menulis.

aharris88
sumber
1
"Kamu bisa menambahkan baris ini ke .vimrc ..." maksudmu .gitignore?