Ini sedikit lebih luas daripada yang diminta OP, tetapi bagi orang yang tidak ingin menggunakan plugin, dan mungkin sistem kontrol revisi lainnya, potongan kecil ini cenderung bekerja dengan cukup baik:
:new
:r! git show branch:file
:1d
Itu menciptakan jendela baru dan menunjukkan file di sana dengan membaca output dari perintah yang diberikan ke buffer baru. Ini tentu saja berfungsi dengan perintah eksternal apa pun, bukan hanya git.
Contoh untuk bzr (di mana sintaks REV dapat menentukan cabang):
:new
:r! bzr cat -r REV file
:1d
Contoh untuk hg (tidak yakin tentang cabang di hg; jangan gunakan cukup)
:new
:r! hg cat -r REV file
:1d
Contoh untuk svn (
:new
:r! svn cat file@REV
:1d
Anda mungkin masih ingin mengatur filetype untuk mendapatkan penyorotan sintaksis seperti pada posting SO, tetapi setidaknya Anda tidak perlu mengacaukan perpipaan.
Setelah dibuka, Anda dapat menyimpannya dengan nama baru dengan :w filename
atau :saveas filename
, karena Vim belum memiliki nama file untuk itu. Jika Anda tidak ingin dapat mengeditnya, Anda juga dapat memasukkan a :setlocal readonly
dan / atau :setlocal nomodifiable
.
-Edit: Filetype Otomatis-
Ini sedikit lebih banyak pekerjaan, tetapi Anda dapat meminta Vim untuk menebak jenis file dengan
:filetype detect
Tapi, karena Vim belum memiliki nama, ini tidak selalu bekerja dengan baik (misalnya, saya menarik beberapa kode C dan tebakannya filtype=conf
.
Kami dapat memberikan nama dengan menyimpannya, tetapi kami tidak ingin menimpa file yang mungkin ada. Kami juga dapat mengatur nama file (Terima kasih @PeterRincker!), Tetapi sekali lagi, kami tidak ingin mengambil risiko tabrakan. Karena tidak mungkin ada file yang merupakan nama cabang dan nama file bersamaan, kami akan menggabungkannya dengan beberapa pemisah yang arbitrer
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
Di mana "file"
diganti dengan nama file aktual dan "branch"
dengan nama cabang
Tentu saja, pada titik ini kita hampir menulis sebuah plugin ;-)
Dengan menggabungkan semuanya, ini dia sebagai fungsi spesifik git yang bisa Anda jatuhkan di vimrc Anda:
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
yang dapat Anda bungkus dalam perintah atau panggilan langsung misalnya call GitFile("whateverBranch","myfile.c")
. Anda akan mendapatkan jendela baru dengan nama penyanggawhateverBranch-myfile.c