Ich möchte eine Datei aus einem anderen Zweig im aktuellen Git-Repository öffnen. Ich habe diese SO-Frage gesehen , aber die Vorschläge für die Kombination mit Vim sind umständlich (Pipe zu Vim, open stdin, set filetype, etc. manuell). Gibt es eine einfachere Methode, um Syntaxhervorhebungen, Dateitypeinstellungen usw. beizubehalten?
Wenn es hilft:
- Ich habe das flüchtige Plugin installiert (obwohl es nur selten verwendet wird).
- Ich muss es nicht ändern.
Die Datei kann die Datei für den aktuell geöffneten oder einen anderen Puffer sein.
[RO]
in der Statuszeile).fugitive
benötigt den Pfad vom Stammverzeichnis des Repositorys. Die Antwort deckt dies bereits ab, aber ich habe fälschlicherweise angenommen, dass der Flüchtling verstehen könnte, wenn wir uns in einem bestimmten Unterverzeichnis des Repos befinden.Dies ist ein wenig weiter gefasst als von OP gefordert, aber für Leute, die keine Plugins und möglicherweise andere Revisionskontrollsysteme verwenden möchten, funktioniert dieses kleine Snippet in der Regel recht gut:
Es wird ein neues Fenster erstellt und die Datei dort angezeigt, indem die Ausgabe des angegebenen Befehls in den neuen Puffer eingelesen wird. Dies funktioniert natürlich mit jedem externen Befehl, nicht nur mit git.
Beispiel für bzr (wobei die REV-Syntax einen Zweig angeben kann):
Beispiel für hg (nicht sicher über Zweige in hg; verwenden Sie es nicht genug)
Beispiel für svn (
Sie möchten wahrscheinlich immer noch den Dateityp so einstellen, dass die Syntax hervorgehoben wird, wie in den SO-Posts, aber Sie müssen sich zumindest nicht mit Piping herumschlagen.
Einmal geöffnet können Sie es unter einem neuen Namen mit
:w filename
oder speichern:saveas filename
, da Vim noch keinen Dateinamen dafür hat. Wenn Sie es nicht bearbeiten können möchten, können Sie auch ein:setlocal readonly
und / oder einwerfen:setlocal nomodifiable
.-Bearbeiten: Automatischer Dateityp-
Es ist etwas mehr Arbeit, aber Sie können Vim bitten, den Dateityp mit zu erraten
Aber da Vim noch keinen Namen hat, funktioniert dies nicht immer gut (zum Beispiel habe ich einen C-Code eingegeben und es wurde vermutet
filtype=conf
.Wir können ihm einen Namen geben, indem wir ihn speichern, aber wir möchten eine möglicherweise vorhandene Datei nicht überschreiben. Wir können auch nur den Dateinamen festlegen (Danke @PeterRincker!), Aber wir möchten auch hier keine Kollisionen riskieren. Da es unwahrscheinlich ist, dass eine Datei existiert, die sowohl den Zweignamen als auch den Dateinamen enthält, verknüpfen wir sie mit einem beliebigen Trennzeichen
Wo
"file"
wird durch den tatsächlichen Dateinamen und"branch"
durch den Zweignamen ersetztNatürlich schreiben wir an dieser Stelle fast ein Plugin ;-)
Wenn Sie alles zusammenfassen, ist dies eine git-spezifische Funktion, die Sie in Ihrem vimrc ablegen können:
die Sie in einen Befehl einwickeln oder direkt aufrufen können, z
call GitFile("whateverBranch","myfile.c")
. Sie erhalten ein neues Fenster mit einem Puffer namenswhateverBranch-myfile.c
quelle
:file
des Namens Ihrer Datei untersuchen, anstatt eine temporäre Datei zu haben. Siehe:h :file