GitHub dla .vimrc i wtyczek

21

Wiem, że wiele osób przechowuje swoje .vimrc na GitHub, aby ułatwić sobie rozpoczęcie pracy na nowych komputerach, co ma dla mnie pełny sens. Dołączanie wtyczek jest jednak problematyczne, ponieważ wtyczki, których używam, są już repozytoriami git. Jak stworzyć repozytorium, które będzie śledzić zarówno ich .vimrc, jak i wszelkie wtyczki, które mogą być zainstalowane?

Tomek
źródło
Wydaje mi się, że może to być zbyt zorientowane na opinie; nie ma obiektywnego „najlepszego” i istnieje wiele dobrych opcji, każda z własnymi zaletami i wadami. Również fragment dotyczący zagnieżdżonych repozytoriów przenosi pytanie bardziej do kategorii „using git”, a mniej o vim. Być może jeśli zamiast tego skupiłeś się na konkretnym problemie z vimem lub wtyczkami vim podczas próby przechowywania konfiguracji na github?
3
Mogę go edytować, aby wyjąć to, co najlepsze ; moim zamiarem było pytanie „jak to zrobić?” pytanie, jednocześnie uznając, że sposób, w jaki myślałem o rozwiązaniu problemu, może nie być idealny.
Tom
Że może pomóc, ale może po prostu sprawiają, że „lista rzeczy” pytanie (tam są, ponownie, wiele różnych sposobów, aby to zrobić skutecznie). Obecnie istnieje temat meta na temat takich pytań, jeśli chcesz przyczynić się do dyskusji na temat tego, jak powinniśmy traktować tego rodzaju pytania.
2
Edytowane. Mam nadzieję, że wyjaśniłem, że pytam „jak to zrobić?”
Tom
1
Wystarczy użyć menedżera wtyczek, takiego jak neobundle.
Philip

Odpowiedzi:

18

Jak radzić sobie z repozytoriami w ramach repozytoriów było stałym pytaniem w git. GIT za Submoduły są jednym ze sposobów rozwiązania tej sytuacji, kosztem dodając trochę więcej złożoność śledzić. Witryna git zawiera wprowadzenie do podmodułów .

Podstawową ideą jest zachowanie odniesienia do innego repozytorium git powiązanego ze ścieżką w repozytorium. Odnośniki te są przechowywane w pliku .gitmodulesw katalogu głównym repozytorium (którym zarządza git, więc zostaw je w spokoju). Część złożoności pojawia się podczas klonowania repozytorium, które zawiera submoduły: musisz jawnie git submodule initutworzyć .gitmodulesplik, a następnie git submodule updatesklonować submoduły.


Oto przewodnik, w jaki sposób dodam nową wtyczkę vim do mojego repozytorium dotfiles ( ~/.vim/alias do tego repozytorium .vim/) za pomocą submodułu:

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

Po submodule add, a git statuspokaże, że zmodyfikowałeś (lub utworzyłeś) .gitmodulesplik za pomocą czegoś takiego:

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

Powinien również zostać pokazany .vim/bundle/vim-elixirjako nowy plik. Git traktuje teraz tę ścieżkę specjalnie: jest to normalny katalog w systemie plików (więc vim ładuje go normalnie), ale git difftraktuje go jako specyficzne zatwierdzenie z repozytorium. Kiedy patrzysz na diffs lub logi dla tej ścieżki (np. git log -1 -u .vim/bundle/vim-elixir), Git pokaże ją jako ciąg jednowierszowy taki jak ten:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

Aktualizacja do najnowszej wersji wtyczki odpowiada wchodząc do repozytorium modułem i sprawdzeniu nowego popełnienia, a następnie popełnienia że do repozytorium:

$ 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
źródło
Dzięki, to wygląda na coś, czego szukałem!
Tom
Ach, nie zauważyłem, że twoja odpowiedź została opublikowana, odkąd przez pewien czas edytowałem swoją.
muru
23

Nie musisz przechowywać wtyczek w swoim VCS; możesz także użyć menedżera pakietów Vima. Od wczoraj używam wtyczki vim :

Możesz zdefiniować wtyczki w swoim vimrc w następujący sposób:

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

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

call plug#end()

Następnie uruchom ponownie Vima, a następnie zainstaluj wtyczki za pomocą:

:PlugInstall

Lub możesz dodać ten fragment z FAQ do pliku vimrc przed plug#begin()wywołaniem:

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

Spowoduje to wstawienie wtyczek ~/.vim/plugged. Nie musisz przechowywać tego pliku w swoim VCS . Jeśli chcesz użyć tego vimrc na innym komputerze, po prostu zadzwoń :PlugInstallna ten komputer.

aby usunąć wtyczkę, usuń ją z pliku vimrc i uruchom:

:PlugClean

Zauważ, że vim-plug nie obsługuje instalowania skryptów ze strony skryptów Vima, ale te skrypty są dublowane w GitHub , więc nie musisz tego robić.

Istnieją również dodatkowe korzyści, takie jak łatwiejsza aktualizacja wtyczki i ładowanie na żądanie w celu uzyskania lepszej wydajności. Nie ryzykujesz również naruszeniem warunków licencji wtyczek, które dystrybuujesz wraz z plikami vimrc.

Zobacz też:

Martin Tournoij
źródło
5

Przechowuję moje vimrc w github i wtyczkach jako podmoduły mojego repozytorium.

W pliku readme.md umieszczam jeden linijkę, która wyciąga repozytorium, a następnie uruchamia skrypt instalacyjny, w ten sposób mogę skopiować jedną linię do edytora i wszystko konfiguruje. Robi coś więcej niż tylko vim (ale niewiele).

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

Aby go użyć:

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

PS. Chętnie skorzystam z jakiejkolwiek rady (tak jak robiłem to przed wiekami i odtąd jej nie dotykałem).

Uwaga: Moją ulubioną częścią jest to, że konfiguruje także git i ustawia go tak, aby używał vima jako narzędzia do porównywania git. Vimdiff to najlepsze narzędzie do porównywania.

Martin York
źródło
5

Jeśli chcesz pozostać przy Patogen, jednym ze sposobów może być użycie podmodułów Git . Kiedy dodajesz submoduł, git rozpoznaje go jako z innego repozytorium i pozostawia jego zawartość w spokoju (chyba że został zmieniony, w takim przypadku pokaże się jako posiadający nieśledzoną zawartość git status). Jeśli wszystkie twoje wtyczki oparte na Github są włączone bundle/, to dodawanie ich jako submodułów jest dość prostym zadaniem z dobrą powłoką:

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

Możesz zobaczyć, jak podmoduły pojawiają się na moim repozytorium vimrc .


Jeśli dodasz plik do podmodułu lub wprowadzisz jakieś zmiany, które nie wpływają na repozytorium, git statusnadal będziesz narzekać na to, że w podmodule wprowadzono nieprzyjęte zmiany lub nieśledzone pliki. Możesz sprawić, aby git ignorował takie zmiany, dodając ignore = dirtydo konfiguracji submodułu w .gitmodulespliku. Na przykład:

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

Jedną z zalet podmodułów jest to, że wersja podmodułu jest dodawana do repozytorium git, dzięki czemu git initautomatycznie zajmuje się sprawdzaniem tej konkretnej wersji. Możesz to wyrzucić i powiedzieć gitowi, aby zignorował submoduły po ich dodaniu, dodając je ignore = alldo konfiguracji w .gitmodulespliku. Na przykład:

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

Na koniec jedno polecenie, aby je wszystkie zaktualizować!

git submodule foreach git pull

Słowo ostrzeżenia: Jestem nowy w submodułach. Nie jestem do końca pewien, jak się zachowują.

muru
źródło
vim-pandemia to kolejny sposób na zwiększenie patogenu bez konieczności używania submodułów. Pandemia obsługuje odległe repozytoria pozostawiając Pathogen do obsługi ścieżki runtimepath. Oznacza to, że potrzebne są dwa narzędzia, ale do różnych zadań, które „powinny” być obsługiwane osobno.
jalanb
Czy ktoś może komentować, dlaczego tpope w pliku Readme patogenu może powiedzieć, dlaczego submoduły nie są dobrym rozwiązaniem? Nie znam też podmodułów (a moje rozwiązanie działa dla mnie świetnie nawet bez menedżera wtyczek), ale zgaduję, że tłum przeciw podmodułowi ma coś ciekawego do powiedzenia.
dash-tom-bang
1
@ dash-tom-bang Nie czytam tego tak, jak on mówi, że nie należy używać submodułów. Myślę, że po prostu mówi, że to nie jest jego preferowana metoda.
Bogaty
1
TBH po kilku latach korzystania z nich zdenerwowało mnie podmoduły. Odradzam teraz ich używanie. Używam teraz wtyczki vim i to tylko ułatwiło mi życie.
muru
4

Możesz po prostu dodać ten wiersz do swojego, .gitignoreaby zignorować wszystkie wtyczki i nie zatwierdzać ich:

vim/bundle

Powiedziałeś też, że problematyczne jest, aby zawierał kod wtyczki, ponieważ są już repozytoriami github. Wydaje mi się, że masz na myśli, że nie chcesz powielać kodu, ale słyszałem, że powiedz, że powinieneś iść dalej i powielać kod, który jest zależnością, aby zawsze móc wrócić do określonego punktu w kodzie i wiedzieć, że to będzie działać. Oto kilka artykułów Jamesa Shore'a na ten temat: http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . Mówi o programowaniu kodu i npm (w przeciwieństwie do vima), ale myślę, że argument nadal ma zastosowanie, potrzebujesz niezawodnego środowiska do kodowania lub pisania.

aharris88
źródło
1
„Możesz po prostu dodać tę linię do swojego .vimrc ...” miałeś na myśli .gitignore?