GitHub für .vimrc und Plugins

21

Ich weiß, dass viele Leute ihre .vimrc auf GitHub speichern, um die Arbeit an neuen Maschinen zu vereinfachen, und das ist für mich absolut sinnvoll. Das Einbinden von Plugins ist jedoch problematisch, da die von mir verwendeten Plugins bereits Git-Repositories sind. Wie erstellt man ein Repo, das sowohl die .vimrc-Datei als auch eventuell installierte Plugins verfolgt?

Tom
quelle
Ich bin der Meinung, dass dies zu meinungsorientiert sein könnte. Es gibt kein objektives "Beste" und es gibt viele gute Optionen, jede mit ihren eigenen Vor- und Nachteilen. Auch das Bit speziell über verschachtelte Repositorys bringt die Frage mehr in die Kategorie "using git" und weniger über vim. Wenn Sie sich stattdessen auf ein bestimmtes Problem mit VIM oder VIM-Plugins konzentriert haben, während Sie versuchten, Ihre Konfiguration auf Github zu speichern?
3
Ich kann es bearbeiten, um das Beste herauszuholen, wenn Sie mögen; meine absicht war eher zu fragen: "wie mache ich das?" Frage, während ich zugebe, dass die Art und Weise, wie ich über das Problem nachdachte, möglicherweise nicht ideal ist.
Tom
Das mag helfen, aber das kann es zu einer Frage der "Liste der Dinge" machen (es gibt wieder viele verschiedene Möglichkeiten, dies effektiv zu tun). Derzeit gibt es ein Meta-Thema zu solchen Fragen, wenn Sie einen Beitrag zur Diskussion darüber leisten möchten, wie wir diese Art von Fragen behandeln sollen.
2
Bearbeitet Ich hoffe, ich habe klarer gemacht, dass ich frage: "Wie mache ich das?"
Tom
1
Benutze einfach einen Plugin Manager wie neobundle.
Philip

Antworten:

18

Wie man mit Repositories innerhalb von Repositories umgeht, war eine ständige Frage bei git. Gits Submodule sind eine Möglichkeit, die Situation zu bewältigen, auf Kosten von ein wenig mehr Komplexität, um den Überblick zu behalten. Die Git-Site enthält eine Einführung in Submodule .

Die Grundidee ist, einen Verweis auf ein anderes Git-Repository zu behalten, das einem Pfad in Ihrem Repository zugeordnet ist. Diese Referenzen werden in einer Datei .gitmodulesim Stammverzeichnis Ihres Repositorys gespeichert (das von git verwaltet wird, lassen Sie es also in Ruhe). Ein Teil der Komplexität spielt beim Klonen eines Repos mit Submodulen eine Rolle: Sie müssen git submodule initdie .gitmodulesDatei explizit erstellen und anschließend git submodule updatedie Submodule klonen.


Hier ist eine exemplarische Vorgehensweise, wie ich meinem Dotfiles-Repository mithilfe eines Submoduls ein neues VIM-Plugin hinzufüge (ich habe ~/.vim/mich auf dieses Repository verlagert .vim/):

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

Nachdem der submodule addeine git statuswürde zeigen , dass Sie (oder erstellt) die geändert haben .gitmodulesDatei, mit so etwas wie folgt aus :

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

Es sollte auch .vim/bundle/vim-elixirals neue Datei angezeigt werden. Git behandelt diesen Pfad jetzt speziell: Es ist ein normales Verzeichnis in Ihrem Dateisystem (also lädt vim es normal), git diffbehandelt es aber als ein bestimmtes Commit aus seinem Repository. Wenn Sie sich Diffs oder Logs für diesen Pfad ansehen (zB git log -1 -u .vim/bundle/vim-elixir), zeigt git dies als einzeilige Zeichenkette an:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

Ein Update auf die neueste Version des Plug - Ins entspricht in das Submodul Repository zu gehen und eine neue begehen Check - out, und dann zu begehen , dass an Ihrem Repository:

$ 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
quelle
Danke, das scheint genau das zu sein, wonach ich gesucht habe!
Tom
Ah, ich habe nicht bemerkt, dass deine Antwort gepostet wurde, da ich meine für einige Zeit bearbeitet habe.
muru
23

Sie müssen keine Plugins in Ihrem VCS speichern. Sie können auch einen Vim-Paketmanager verwenden. Seit gestern benutze ich vim-plug :

Sie können Plugins in Ihrem vimrc folgendermaßen definieren:

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

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

call plug#end()

Dann starte Vim neu und installiere die Plugins mit:

:PlugInstall

Oder Sie können dieses Snippet aus den FAQ vor dem plug#begin()Aufruf zu Ihrer vimrc-Datei hinzufügen :

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

Dadurch werden die Plugins eingefügt ~/.vim/plugged. Sie müssen diese Datei nicht in Ihrem VCS behalten . Wenn Sie diesen vimrc auf einem anderen Computer verwenden möchten, rufen Sie einfach diesen Computer an :PlugInstall.

Um ein Plugin zu entfernen, entfernen Sie es aus der vimrc-Datei und führen Sie Folgendes aus:

:PlugClean

Beachten Sie, dass vim-plug die Installation von Skripten von der Vim-Skripten-Website nicht unterstützt. Diese Skripten werden jedoch auf GitHub gespiegelt , sodass dies nicht erforderlich ist.

Dies hat auch einige zusätzliche Vorteile, wie das einfachere Aktualisieren des Plugins und das Laden bei Bedarf, um eine bessere Leistung zu erzielen. Sie laufen auch nicht Gefahr, die Lizenzbestimmungen der Plugins zu verletzen, die Sie mit Ihren vimrc-Dateien verteilen.

Siehe auch:

Martin Tournoij
quelle
5

Ich speichere mein vimrc in github und die Plugins als Submodule meines Repositorys.

In die Datei readme.md habe ich einen Einzeiler eingefügt, der das Repository abruft. Anschließend wird das Setup-Skript ausgeführt. Auf diese Weise kann ich eine Zeile in einen Editor kopieren und alles einrichten. Es macht ein bisschen mehr als nur vim (aber nicht viel).

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

Um es zu benutzen:

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

PS. Bereit, Ratschläge anzunehmen (wie ich es vor langer Zeit getan habe und seitdem nicht mehr berührt habe).

Hinweis: Mein Lieblingsteil ist, dass es auch Git einrichtet und es so einrichtet, dass vim als Diff-Tool für Git verwendet wird. Vimdiff ist das beste Diff-Tool.

Martin York
quelle
5

Wenn Sie bei Pathogen bleiben möchten, können Sie Git-Submodule verwenden . Wenn Sie ein Submodul hinzufügen, wird es von git als aus einem anderen Repository erkannt und der Inhalt bleibt unverändert (es sei denn, es wurde geändert. In diesem Fall wird angezeigt, dass der Inhalt bei Ihnen nicht verfolgt wurde git status). Wenn Sie alle Ihre Github-basierten Plugins installiert haben bundle/, ist das Hinzufügen als Submodul eine relativ einfache Aufgabe mit einer guten Shell:

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

Sie können sich ansehen, wie Submodule in meinem VIMRC-Repo angezeigt werden .


Wenn Sie einem Submodul eine Datei hinzufügen oder Änderungen vornehmen, die sich nicht auf das Repository auswirken, git statuswird weiterhin darüber geklagt, dass das Submodul nicht festgeschriebene Änderungen oder nicht überwachte Dateien enthält. Sie können festlegen, dass Git solche Änderungen ignoriert, indem Sie ignore = dirtyder Submodulkonfiguration in der .gitmodulesDatei hinzufügen . Beispielsweise:

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

Ein Vorteil von Submodulen ist, dass die Revision des Submoduls zum Git-Repository hinzugefügt wird, so dass sich a git initautomatisch um das Auschecken dieser bestimmten Revision kümmert. Sie können das wegwerfen und git anweisen, Submodule zu ignorieren, sobald Sie sie hinzugefügt haben, indem Sie sie ignore = allzu ihrer Konfiguration in der .gitmodulesDatei hinzufügen . Beispielsweise:

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

Zuletzt ein Befehl, um alle zu aktualisieren!

git submodule foreach git pull

Achtung: Ich bin neu in Submodulen. Ich bin mir nicht sicher, wie sie sich verhalten.

muru
quelle
Vim-Pandemie ist eine weitere Möglichkeit, Pathogen zu verbessern, ohne dass Submodule verwendet werden müssen. Pandemic verwaltet die Remote-Repositorys und Pathogen übernimmt den Laufzeitpfad. Dies bedeutet, dass man zwei Werkzeuge benötigt, aber für unterschiedliche Aufgaben, die "getrennt" behandelt werden sollten.
Jalanb
Kann jemand einen Kommentar dazu abgeben, warum in der Infodatei für Krankheitserreger die Frage gestellt wird, warum Submodule nicht der richtige Weg sind? Ich kenne auch keine Submodule (und meine Lösung funktioniert auch ohne Plugin-Manager hervorragend), aber ich vermute, dass die Menge der Anti-Submodule etwas Interessantes zu sagen hat.
Dash-Tom-Bang
1
@ dash-tom-bang Ich lese nicht so viel, wie er sagt, dass Sie keine Submodule verwenden sollten. Ich denke, er sagt nur, dass es nicht seine bevorzugte Methode ist.
Rich
1
TBH Nachdem ich sie einige Jahre lang benutzt hatte, ärgerte ich mich über Submodule. Ich würde jetzt davon abraten, sie zu verwenden. Ich benutze jetzt Vim-Plug und es hat mir nur das Leben leichter gemacht.
muru
4

Sie können diese Zeile einfach zu Ihrer hinzufügen .gitignore, um alle Ihre Plugins zu ignorieren und sie nicht festzuschreiben:

vim/bundle

Sie sagten auch, dass es problematisch sei, den Plug-in-Code einzuschließen, da es sich bereits um Github-Repos handelt. Ich denke , Sie bedeuten , dass Sie nicht wollen , um den Code zu duplizieren, aber ich habe gehört , sagte es , dass Sie weitermachen sollen und doppelte Code , dass eine Abhängigkeit ist , so dass Sie immer in Ihrem Code zu einem bestimmten Punkt zurückgehen können und wissen , dass es wird klappen. Hier sind einige Artikel von James Shore, die darüber sprechen: http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . Er spricht über Programmcode und npm (im Gegensatz zu vim), aber ich denke, das Argument gilt immer noch, Sie möchten eine zuverlässige Umgebung, in der Sie programmieren oder schreiben können.

aharris88
quelle
1
"Sie können diese Zeile einfach zu Ihrer .vimrc-Datei hinzufügen ..." meinten Sie .gitignore?