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:
:new
:r! git show branch:file
:1d
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):
:new
:r! bzr cat -r REV file
:1d
Exemple pour hg (pas sûr des branches en hg; ne l'utilisez pas assez)
:new
:r! hg cat -r REV file
:1d
Exemple pour svn (
:new
:r! svn cat file@REV
:1d
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
:filetype detect
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.
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
Où "file"
est remplacé par le nom de fichier actuel et "branch"
par le nom de la branche
Bien 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:
function! GitFile(branch,file)
new
exe "silent r! git show " . a:branch . ":" . a:file
1d
exe "silent file " . a:branch . "-" . a:file
filetype detect
setlocal readonly "don't allow saving
setlocal nomodified "allow easy quitting without saving
setlocal nomodifiable "don't allow modification
endfunction
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