J'aimerais ouvrir un fichier depuis une autre branche du référentiel git actuel. J'ai vu cette question SO , mais les suggestions pour la combiner avec Vim sont fastidieuses (pipe vers Vim, stdin ouvert, set type de fichier, etc. manuellement). Existe-t-il un moyen plus simple de conserver la coloration syntaxique, les paramètres de type de fichier, etc.?
Si cela aide:
- J'ai le plugin fugitif installé (bien que rarement utilisé).
- Je n'ai pas besoin de le modifier.
Le fichier peut être le fichier du tampon actuellement ouvert ou un fichier différent.
[RO]
dans la ligne d'état).fugitive
a besoin du chemin depuis la racine du référentiel. La réponse couvre déjà cela, mais j'ai supposé à tort que le fugitif pouvait comprendre lorsque nous nous trouvions dans un sous-répertoire particulier du référentiel.C’est un peu plus large que ce que demande OP, mais pour les personnes qui ne souhaitent pas utiliser de plug-ins, voire d’autres systèmes de contrôle de révision, ce petit extrait a tendance à fonctionner assez bien:
Il crée une nouvelle fenêtre et affiche le fichier à cet endroit en lisant le résultat de la commande donnée dans le nouveau tampon. Ceci fonctionne bien sûr avec n'importe quelle commande externe, pas seulement git.
Exemple pour bzr (où la syntaxe REV peut spécifier une branche):
Exemple pour hg (pas sûr des branches en hg; ne l'utilisez pas assez)
Exemple pour svn (
Vous voudrez probablement toujours définir le type de fichier pour que la syntaxe soit surlignée comme dans les publications SO, mais au moins vous n’aurez pas à vous soucier de la tuyauterie.
Une fois ouvert, vous pouvez le sauvegarder sous un nouveau nom avec
:w filename
ou:saveas filename
puisque Vim n'aura pas encore de nom de fichier. Si vous ne voulez pas pouvoir l'éditer, vous pouvez aussi ajouter un:setlocal readonly
et / ou:setlocal nomodifiable
.-Edit: Type de fichier automatique-
C'est un peu plus de travail, mais vous pouvez demander à Vim de deviner le type de fichier avec
Mais, comme Vim n’a pas encore de nom, cela ne fonctionne pas toujours bien (par exemple, j’ai introduit du code C et j’ai deviné
filtype=conf
.Nous pouvons lui donner un nom en l'enregistrant, mais nous ne voulons pas écraser un fichier éventuellement existant. Nous pouvons également simplement définir le nom de fichier (Merci @PeterRincker!), Mais encore une fois, nous ne voulons pas risquer des collisions. Comme il est peu probable qu'un fichier existe à la fois avec le nom de branche et le nom de fichier, nous les concaténerons avec un séparateur arbitraire.
Où
"file"
est remplacé par le nom de fichier actuel et"branch"
par le nom de la brancheBien sûr, nous sommes presque en train d’écrire un plugin ;-)
En résumé, voici une fonction spécifique à git que vous pouvez déposer dans votre vimrc:
que vous pouvez insérer dans une commande ou appeler directement, par exemple
call GitFile("whateverBranch","myfile.c")
. Vous obtiendrez une nouvelle fenêtre avec un tampon nomméwhateverBranch-myfile.c
la source
:file
le nom de votre fichier au lieu d'un fichier temporaire. Voir:h :file