Це дещо ширше, ніж те, що запитувала ОП, але для людей, які не бажають використовувати плагіни та, можливо, інші системи контролю ревізії, цей маленький фрагмент працює досить добре:
:new
:r! git show branch:file
:1d
Він створює нове вікно і показує файл там, читаючи вихід даної команди в новий буфер. Це, звичайно, працює з будь-якою зовнішньою командою, а не лише з git.
Приклад для bzr (де синтаксис REV може вказати гілку):
:new
:r! bzr cat -r REV file
:1d
Приклад hg (не впевнений у гілках hg; не використовуйте його достатньо)
:new
:r! hg cat -r REV file
:1d
Приклад для svn (
:new
:r! svn cat file@REV
:1d
Ви, ймовірно, хочете встановити тип файлу для виділення синтаксису, як у публікаціях SO, але принаймні вам не доведеться возитися з трубопроводом.
Після відкриття ви можете зберегти його під новим іменем :w filename
або :saveas filename
, оскільки Vim ще не буде мати ім’я файлу. Якщо ви не хочете мати можливість редагувати його, ви також можете вписати а :setlocal readonly
та / або :setlocal nomodifiable
.
-Edit: автоматичний тип файлу-
Це трохи більше роботи, але ви можете попросити Віма здогадатися про тип файлу
:filetype detect
Але оскільки у Vim ще немає імені, це не завжди працює добре (наприклад, я вписав якийсь код C, і він здогадався filtype=conf
.
Ми можемо дати йому ім’я, зберігаючи його, але ми не хочемо перезаписувати можливий існуючий файл. Ми також можемо просто встановити ім’я файлу (спасибі @PeterRincker!), Але знову ж таки, ми не хочемо ризикувати зіткненнями. Оскільки навряд чи існує файл, який є і ім'ям гілки, і ім'ям файлу разом, ми з'єднаємо їх з деяким довільним роздільником
:exe "silent file " . "branch" . "-" . "file"
:filetype detect
Де "file"
замінено фактичним іменем файлу та "branch"
назвою гілки
Звичайно, в цей момент ми майже пишемо плагін ;-)
Розташовуючи все це разом, ось ця функція, як специфічна git, ви можете скинути свій 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
яку ви могли б запустити в команду або безпосередньо зателефонувати, наприклад call GitFile("whateverBranch","myfile.c")
. Ви отримаєте нове вікно з буфером з ім'ямwhateverBranch-myfile.c