2017-11-20 3 views
2

ich den folgenden Befehl in Vim Batch Auto-Format einen bestimmten Dateityp verwenden:Execute vim Befehl als git pre-commit Haken

:args ~/someDirectory/**/*.filetype | argdo execute "normal gg=G" | update 

Ich versuche, herauszufinden, wie ich diesen Befehl als Pre laufen würde -commit Hook, um sicherzustellen, dass alle Dateien des Dateityps, die mir wichtig sind, vor dem Festschreiben automatisch formatiert werden.

Wie würde ich das erreichen?

Vielen Dank im Voraus.

Antwort

2

Eine Lösung wäre, as in this answer, rufen vim:

files=`find /path/to/repo -name "*.filetype" -type f` 
for file in $files 
do 
    vim -e -s -n "+normal gg=GZZ" $file 
done 

Aber anstatt einen pre-commit Haken zu verwenden, können Sie definieren einen clean Skript, das ein Skript ausgeführt wird (Aufruf vim über).

Das Skript wird durch ein content filter driver genannt, mit einem .gitattributes declaration (in Ihrem Fall: *.filetype).

https://i.stack.imgur.com/tumAc.png
(Bild von "Customizing Git - Git Attributes" von "Pro Git book"))

Sobald Sie erklären, dass der Inhalt Filer-Treiber in Ihrer lokalen git Config, wird es automatisch auf git commit, das Skript anwenden.

Siehe ein vollständiges Beispiel in "Best practice - Git + Build automation - Keeping configs separate".

+0

Danke, dass Sie mich auf den richtigen Weg gebracht haben, aber ich bin nicht ganz da. Filter scheinen stdin zu erwarten und auf stdout zu schreiben. Wenn ich nur die Datei (en) formatieren möchte, die ich festlege, wie würde ich das machen? % f gibt an, dass der Dateiname übergeben wird, aber die Dokumente unmittelbar nach dem Status, bei dem die Filter stdin und stdout erwartet werden. Also all dies, wie kann ich meinen vim-Befehl auf die spezifischen Datei (en) anwenden, die festgeschrieben werden? –

+0

@RyanPrice "Wenn ich nur die Datei (en), die committiert werden, formatieren möchte, wie würde ich das machen?": Das ist was ein sauberes Skript tut: es formatiert nur Dateien, die festgeschrieben werden sollen. Von dort aus sehen Sie, ob Sie den Inhalt nicht an einen vim-Befehl übergeben können, wie in https://vi.stackexchange.com/a/5994 – VonC