Điều này rộng hơn một chút so với những gì OP yêu cầu, nhưng đối với những người không muốn sử dụng plugin và có thể các hệ thống kiểm soát sửa đổi khác, đoạn trích nhỏ này có xu hướng hoạt động khá tốt:
:new
:r! git show branch:file
:1d
Nó tạo ra một cửa sổ mới và hiển thị tệp ở đó bằng cách đọc đầu ra của lệnh đã cho vào bộ đệm mới. Điều này tất nhiên hoạt động với bất kỳ lệnh bên ngoài, không chỉ git.
Ví dụ cho bzr (trong đó cú pháp REV có thể chỉ định một nhánh):
:new
:r! bzr cat -r REV file
:1d
Ví dụ cho hg (không chắc chắn về các nhánh trong hg; không sử dụng đủ)
:new
:r! hg cat -r REV file
:1d
Ví dụ cho svn (
:new
:r! svn cat file@REV
:1d
Bạn vẫn có thể muốn đặt kiểu tệp để làm nổi bật cú pháp như trong các bài viết SO, nhưng ít nhất bạn không phải gặp rắc rối với đường ống.
Sau khi mở, bạn có thể lưu nó dưới một tên mới bằng :w filename
hoặc :saveas filename
, vì Vim sẽ không có tên tệp cho nó. Nếu bạn không muốn chỉnh sửa nó, bạn cũng có thể gửi một :setlocal readonly
và / hoặc :setlocal nomodifiable
.
-Chỉnh sửa: Filetype tự động-
Đó là một công việc nhiều hơn một chút, nhưng bạn có thể yêu cầu Vim đoán kiểu tệp với
:filetype detect
Nhưng, vì Vim chưa có tên, nên điều này không phải lúc nào cũng hoạt động tốt (ví dụ: tôi đã nhập một số mã C và nó đoán filtype=conf
.
Chúng tôi có thể đặt tên cho nó bằng cách lưu nó, nhưng chúng tôi không muốn ghi đè lên một tệp có thể có. Chúng tôi cũng có thể chỉ đặt tên tệp (Cảm ơn @PeterRincker!), Nhưng một lần nữa, chúng tôi không muốn mạo hiểm va chạm. Vì không chắc là một tệp tồn tại cả tên nhánh và tên tệp cùng nhau, chúng tôi sẽ ghép chúng với một số dấu tách tùy ý
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
Nơi "file"
được thay thế bằng tên tệp thực tế và "branch"
với tên chi nhánh
Tất nhiên, tại thời điểm này, chúng tôi gần như đang viết một plugin ;-)
Kết hợp tất cả lại với nhau, ở đây nó là một hàm cụ thể git mà bạn có thể thả vào vimrc của mình:
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
mà bạn có thể gói trong một lệnh hoặc gọi trực tiếp, ví dụ call GitFile("whateverBranch","myfile.c")
. Bạn sẽ nhận được một cửa sổ mới với một bộ đệm có tênwhateverBranch-myfile.c