Saya ingin membuka file dari cabang lain di repositori git saat ini. Saya telah melihat pertanyaan SO ini , tetapi saran untuk menggabungkannya dengan Vim rumit (pipa ke Vim, buka stdin, atur filetype, dll secara manual). Apakah ada cara yang lebih sederhana yang mempertahankan penyorotan sintaks, pengaturan tipe file, dll.?
Jika itu membantu:
- Saya telah menginstal plugin buron (meskipun jarang digunakan).
- Saya tidak perlu memodifikasinya.
File dapat berupa file untuk buffer yang saat ini terbuka, atau yang berbeda.
[RO]
di baris status).fugitive
membutuhkan path dari root repositori. Jawabannya sudah mencakup ini, tetapi saya salah berasumsi bahwa buron bisa mengerti ketika kita berada di subdirektori tertentu dari repo.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:
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):
Contoh untuk hg (tidak yakin tentang cabang di hg; jangan gunakan cukup)
Contoh untuk svn (
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
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
Di mana
"file"
diganti dengan nama file aktual dan"branch"
dengan nama cabangTentu 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:
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
sumber
:file
nama file Anda daripada memiliki file sementara. Lihat:h :file