Jest to nieco szersze niż to, o co poprosił OP, ale dla osób, które nie chcą używać wtyczek i być może innych systemów kontroli wersji, ten mały fragment kodu działa dość dobrze:
:new
:r! git show branch:file
:1d
Tworzy nowe okno i pokazuje tam plik, wczytując dane wyjściowe polecenia do nowego bufora. Działa to oczywiście z każdym zewnętrznym poleceniem, nie tylko z git.
Przykład dla bzr (gdzie w składni REV można określić gałąź):
:new
:r! bzr cat -r REV file
:1d
Przykład dla hg (nie jestem pewien co do gałęzi w hg; nie używaj go wystarczająco)
:new
:r! hg cat -r REV file
:1d
Przykład dla svn (
:new
:r! svn cat file@REV
:1d
Prawdopodobnie nadal chciałbyś ustawić typ pliku, aby uzyskać podświetlanie składni, tak jak w postach SO, ale przynajmniej nie musisz bałagać się pipingiem.
Po otwarciu możesz zapisać go pod nową nazwą za pomocą :w filename
lub :saveas filename
, ponieważ Vim nie będzie miał jeszcze nazwy pliku. Jeśli nie chcesz móc go edytować, możesz także wrzucić a :setlocal readonly
i / lub :setlocal nomodifiable
.
-Edycja: automatyczny typ pliku
To trochę więcej pracy, ale możesz poprosić Vima, aby odgadł typ pliku
:filetype detect
Ale ponieważ Vim nie ma jeszcze nazwy, nie zawsze działa to dobrze (na przykład ściągnąłem kod C i zgadłem filtype=conf
.
Możemy nadać mu nazwę poprzez zapisanie, ale nie chcemy nadpisywać istniejącego pliku. Możemy również ustawić nazwę pliku (dzięki @PeterRincker!), Ale znowu nie chcemy ryzykować kolizji. Ponieważ istnieje małe prawdopodobieństwo, że istnieje plik, który jest jednocześnie nazwą gałęzi i nazwą pliku, połączymy je dowolnym separatorem
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
Gdzie "file"
jest zastąpione rzeczywistą nazwą pliku i "branch"
nazwą oddziału
Oczywiście w tym momencie prawie piszemy wtyczkę ;-)
Zrzucając to wszystko razem, tutaj jest to funkcja specyficzna dla git, którą możesz zostawić w 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
które można zawinąć bezpośrednio w polecenie lub np call GitFile("whateverBranch","myfile.c")
. Otrzymasz nowe okno z buforem o nazwiewhateverBranch-myfile.c