Questo è un po 'più ampio di quello che ha chiesto OP, ma per le persone che non vogliono usare plugin e forse altri sistemi di controllo di revisione, questo piccolo frammento tende a funzionare abbastanza bene:
:new
:r! git show branch:file
:1d
Crea una nuova finestra e mostra il file lì leggendo l'output del comando dato nel nuovo buffer. Questo ovviamente funziona con qualsiasi comando esterno, non solo con git.
Esempio per bzr (dove la sintassi REV può specificare un ramo):
:new
:r! bzr cat -r REV file
:1d
Esempio per hg (non sono sicuro dei rami in hg; non usarlo abbastanza)
:new
:r! hg cat -r REV file
:1d
Esempio per svn (
:new
:r! svn cat file@REV
:1d
Probabilmente vorrai comunque impostare il tipo di file per ottenere l'evidenziazione della sintassi come nei post SO, ma almeno non devi fare confusione con il piping.
Una volta aperto, puoi salvarlo con un nuovo nome con :w filename
o :saveas filename
, poiché Vim non avrà ancora un nome file per esso. Se non vuoi essere in grado di modificarlo, puoi anche inserire un :setlocal readonly
e / o :setlocal nomodifiable
.
-Edit: Tipo di file automatico-
È un po 'più di lavoro, ma puoi chiedere a Vim di indovinare il tipo di file
:filetype detect
Ma, dal momento che Vim non ha ancora un nome, non sempre funziona bene (ad esempio, ho inserito un codice C e ho indovinato filtype=conf
.
Possiamo dargli un nome salvandolo, ma non vogliamo sovrascrivere un file eventualmente esistente. Possiamo anche solo impostare il nome del file (grazie @PeterRincker!), Ma ancora una volta, non vogliamo rischiare collisioni. Poiché è improbabile che esista un file che sia insieme il nome del ramo e il nome del file, li concateneremo con un separatore arbitrario
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
Dove "file"
viene sostituito con il nome file effettivo e "branch"
con il nome del ramo
Certo, a questo punto stiamo quasi scrivendo un plugin ;-)
Mettendo tutto insieme, qui è come una funzione specifica git che potresti inserire nel tuo 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
che potresti racchiudere in un comando o chiamare direttamente ad es call GitFile("whateverBranch","myfile.c")
. Otterrai una nuova finestra con un buffer denominatowhateverBranch-myfile.c