GitHub สำหรับ. vimrc และปลั๊กอิน


21

ฉันรู้ว่าหลาย ๆ คนเก็บ. vimrc ของพวกเขาไว้บน GitHub เพื่อให้ง่ายต่อการได้รับสิทธิในการทำงานกับเครื่องจักรใหม่และนั่นก็สมเหตุสมผลสำหรับฉัน อย่างไรก็ตามการรวมปลั๊กอินนั้นเป็นปัญหาเพราะปลั๊กอินที่ฉันใช้นั้นเป็นที่เก็บคอมไพล์แล้ว เราจะสร้าง repo ที่จะติดตามทั้ง. vimrc และปลั๊กอินที่อาจติดตั้งได้อย่างไร


ฉันรู้สึกว่านี่อาจจะเป็นไปตามความคิดเห็น ไม่มีวัตถุประสงค์ "ดีที่สุด" และมีตัวเลือกที่ดีมากมายแต่ละข้อมีข้อดีและข้อเสียของตัวเอง อีกทั้งบิตโดยเฉพาะเกี่ยวกับที่เก็บซ้อนจะทำให้คำถามมีอยู่ในหมวดหมู่ "using git" และมีความเป็นกลุ่มน้อย บางทีหากคุณมุ่งเน้นไปที่ปัญหาเฉพาะที่คุณมีกับปลั๊กอิน vim หรือ vim ในขณะที่พยายามจัดเก็บการกำหนดค่าของคุณบน gitHub?

3
ฉันสามารถแก้ไขเพื่อนำออกมาดีที่สุดหากคุณต้องการ; ความตั้งใจของฉันคือการถามมากขึ้นของ "ฉันจะทำอย่างไร" คำถามในขณะที่ยอมรับว่าวิธีที่ฉันคิดเกี่ยวกับการไปเกี่ยวกับปัญหาอาจไม่เหมาะ
Tom

นั่นอาจช่วยได้ แต่นั่นอาจทำให้มันเป็นคำถาม "รายการสิ่งต่าง ๆ " (มีอีกหลายวิธีที่จะทำสิ่งนี้ได้อย่างมีประสิทธิภาพ) ขณะนี้มีหัวข้อเกี่ยวกับเมตาเกี่ยวกับคำถามดังกล่าวหากคุณต้องการมีส่วนร่วมในการอภิปรายเกี่ยวกับวิธีที่เราควรปฏิบัติต่อคำถามประเภทนี้

2
แก้ไข ฉันหวังว่าฉันจะทำให้ชัดเจนยิ่งขึ้นว่าฉันถามว่า "ฉันจะทำอย่างไร"
ทอม

1
เพียงใช้ตัวจัดการปลั๊กอินเช่น neobundle
Philip

คำตอบ:


18

วิธีจัดการกับที่เก็บข้อมูลภายในที่เก็บข้อมูลเป็นคำถามที่ต่อเนื่องกับคอมไพล์ submodulesของ Git เป็นวิธีหนึ่งในการจัดการกับสถานการณ์โดยมีค่าใช้จ่ายในการเพิ่มความซับซ้อนเล็กน้อยเพื่อติดตาม เว็บไซต์คอมไพล์มีการแนะนำให้ submodules

แนวคิดพื้นฐานคือการเก็บการอ้างอิงไปยังที่เก็บ git อื่นที่เกี่ยวข้องกับเส้นทางบนพื้นที่เก็บข้อมูลของคุณ การอ้างอิงเหล่านี้ถูกเก็บไว้ในไฟล์.gitmodulesในรูทของที่เก็บของคุณ (ซึ่งจัดการโดย git ดังนั้นปล่อยให้อยู่คนเดียว) ความซับซ้อนบางอย่างเกิดขึ้นเมื่อทำการคัดลอก repo ที่มี submodules: คุณต้องgit submodule initสร้าง.gitmodulesไฟล์อย่างชัดเจนแล้วgit submodule updateทำการโคลน submodules


นี่คือคำแนะนำว่าฉันจะเพิ่มปลั๊กอิน vim ใหม่ในที่เก็บ dotfiles ของฉันได้อย่างไร (ฉันได้~/.vim/ใช้ชื่อแทน repo นี้.vim/) โดยใช้ submodule:

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

หลังจากsubmodule add, a 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จะถือว่ามันเป็นคอมมิทเฉพาะจากคอมมิทของมัน เมื่อดู diffs หรือ log สำหรับเส้นทางนั้น (เช่นgit log -1 -u .vim/bundle/vim-elixir) git จะแสดงมันเป็นสตริงหนึ่งบรรทัดดังนี้:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

การอัปเดตปลั๊กอินเวอร์ชันล่าสุดสอดคล้องกับการเข้าไปในที่เก็บของ submodule และตรวจสอบการคอมมิทใหม่จากนั้นคอมมิทไปที่ที่เก็บของคุณ:

$ 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

ขอบคุณที่ดูเหมือนสิ่งที่ฉันกำลังมองหา!
ทอม

อาฉันไม่ได้สังเกตว่าคำตอบของคุณถูกโพสต์เนื่องจากฉันแก้ไขของฉันบางครั้ง
muru

23

คุณไม่จำเป็นต้องจัดเก็บปลั๊กอินใน VCS ของคุณ คุณยังสามารถใช้เครื่องมือจัดการแพ็คเกจเป็นกลุ่ม ตั้งแต่เมื่อวานฉันใช้vim-plug :

คุณสามารถกำหนดปลั๊กอินใน vimrc ของคุณดังนี้:

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

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

call plug#end()

จากนั้นรีสตาร์ท Vim จากนั้นติดตั้งปลั๊กอินด้วย:

:PlugInstall

หรือคุณสามารถเพิ่มตัวอย่างนี้จากคำถามที่พบบ่อยไปยังไฟล์ 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

โปรดทราบว่า vim-plug ไม่รองรับการติดตั้งสคริปต์จากเว็บไซต์สคริปต์ Vim แต่สคริปต์เหล่านั้นสะท้อนอยู่บน GitHubดังนั้นจึงไม่จำเป็นต้องทำเช่นนั้น

นอกจากนี้ยังมีข้อดีเพิ่มเติมบางประการเช่นการปรับปรุงปลั๊กอินให้ง่ายขึ้นและการโหลดตามความต้องการเพื่อประสิทธิภาพที่ดีขึ้น คุณยังไม่เสี่ยงต่อการละเมิดข้อกำหนดสิทธิการใช้งานของปลั๊กอินที่คุณแจกจ่ายด้วยไฟล์ vimrc ของคุณ

ดูสิ่งนี้ด้วย:


5

ฉันเก็บ vimrc ของฉันใน github และปลั๊กอินเป็น submodules ของที่เก็บของฉัน

ในไฟล์ readme.md ฉันใส่หนึ่งซับที่ดึงที่เก็บจากนั้นเรียกใช้สคริปต์การตั้งค่าด้วยวิธีนี้ฉันสามารถคัดลอกหนึ่งบรรทัดลงในตัวแก้ไขและตั้งค่าทุกอย่าง มันเป็นอะไรที่มากกว่าแค่เสียงเรียกเข้า (แต่ไม่มาก)

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

PS ยินดีที่จะให้คำแนะนำใด ๆ (เช่นที่ฉันทำมานานแล้วและไม่ได้สัมผัสมันตั้งแต่)

หมายเหตุ: ส่วนที่ฉันชอบคือมันตั้งค่า git ด้วยและตั้งค่าให้ใช้ vim เป็นเครื่องมือ diff สำหรับ git Vimdiff เป็นเครื่องมือ diff ที่ดีที่สุด


5

หากคุณต้องการที่จะติดกับเชื้อโรควิธีหนึ่งที่อาจจะใช้submodules Git เมื่อคุณเพิ่ม submodule git จะรับรู้ว่ามันมาจากที่เก็บอื่นและปล่อยให้เนื้อหานั้นอยู่คนเดียว (เว้นแต่ว่ามันจะถูกเปลี่ยนแปลงในกรณีนี้มันจะปรากฏขึ้นว่ามีเนื้อหาที่ไม่ได้ติดตามเมื่อคุณทำgit status) หากคุณมีปลั๊กอินที่ใช้ Github อยู่ทั้งหมดคุณสามารถเพิ่มปลั๊กอินbundle/เหล่านี้เนื่องจาก submodules เป็นงานที่ค่อนข้างง่ายและมี shell ที่ดี:

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

คุณสามารถดูได้ว่า submodules ปรากฏขึ้นที่vimrc repo ของฉันได้อย่างไร


หากคุณเพิ่มไฟล์ลงใน submodule หรือทำการเปลี่ยนแปลงบางอย่างที่ไม่ส่งผลกระทบต่อที่เก็บgit statusจะยังคงบ่นเกี่ยวกับ submodule ที่มีการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดหรือไฟล์ที่ไม่ได้ติดตาม คุณสามารถทำให้คอมไพล์ละเว้นการเปลี่ยนแปลงดังกล่าวได้โดยเพิ่มignore = dirtyการกำหนดค่า submodule ใน.gitmodulesไฟล์ ตัวอย่างเช่น:

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

ข้อดีอย่างหนึ่งของ submodules คือการแก้ไข submodule นั้นจะถูกเพิ่มเข้าไปใน git repository เพื่อที่git initจะทำการตรวจสอบการแก้ไขนั้น ๆ โดยอัตโนมัติ คุณสามารถละทิ้งสิ่งนั้นและบอกให้คอมไพล์เพิกเฉย submodules เมื่อคุณเพิ่มพวกมันด้วยการเพิ่ม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

คำเตือน: ฉันยังใหม่กับ submodules ฉันไม่แน่ใจจริงๆว่าพวกเขาประพฤติตนอย่างไร


vim-pandemicเป็นอีกวิธีหนึ่งในการเพิ่มประสิทธิภาพให้กับเชื้อโรคโดยไม่จำเป็นต้องใช้ submodules Pandemic จัดการที่เก็บข้อมูลระยะไกลจาก Pathogen เพื่อจัดการ runtimepath นี่หมายความว่าเราต้องการเครื่องมือสองอย่าง แต่สำหรับงานที่แตกต่างกันซึ่ง "ควร" ได้รับการจัดการแยกกัน
jalanb

ทุกคนสามารถแสดงความคิดเห็นว่าทำไม tpope ใน readme ของเชื้อโรคอาจบอกว่าทำไม submodules จึงไม่ใช่ทางที่จะไป? ฉันไม่ทราบว่า submodules (และโซลูชันของฉันทำงานได้ดีสำหรับฉันโดยไม่ต้องเป็นผู้จัดการปลั๊กอิน) แต่ฉันเดาว่าฝูงชนต่อต้าน submodule มีบางสิ่งที่น่าสนใจที่จะพูด
dash-tom-bang

1
@ dash-tom-bang ฉันไม่ได้อ่านบิตนั้นในขณะที่เขาพูดว่าคุณไม่ควรใช้ submodules ฉันคิดว่าเขาแค่บอกว่ามันไม่ใช่วิธีที่เขาชอบ
Rich

1
TBH หลังจากใช้ไปสองสามปีฉันก็รู้สึกหงุดหงิดกับ submodules ตอนนี้ฉันจะแนะนำต่อต้านการใช้พวกเขา ตอนนี้ฉันใช้ vim-plug และมันทำให้ชีวิตของฉันง่ายขึ้น
muru

4

คุณสามารถเพิ่มบรรทัดนี้ลงใน.gitignoreเพื่อไม่สนใจปลั๊กอินทั้งหมดและไม่ผูกมัด:

vim/bundle

นอกจากนี้คุณยังบอกว่ามันเป็นปัญหาที่จะรวมรหัสปลั๊กอินเพราะพวกเขาอยู่แล้ว github repos ฉันเดาว่าคุณหมายความว่าคุณไม่ต้องการทำซ้ำรหัส แต่ฉันได้ยินว่ามันบอกว่าคุณควรไปข้างหน้าและทำซ้ำรหัสซึ่งเป็นสิ่งที่ต้องพึ่งพาเพื่อให้คุณสามารถกลับไปที่จุดใดจุดหนึ่งในรหัสของคุณและรู้ว่า มันจะทำงาน. นี่คือบทความบางส่วนจาก James Shore ที่พูดถึงเรื่องนี้: 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 หรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.