Я хотел бы открыть файл из другой ветки в текущем хранилище git. Я видел этот вопрос SO , но предложения по его объединению с Vim громоздки (передача в Vim, открытие stdin, установка типа файла и т. Д. Вручную). Есть ли более простой способ сохранить подсветку синтаксиса, настройки типов файлов и т. Д.?
Если это поможет:
- У меня установлен беглый плагин (хотя используется редко).
- Мне не нужно изменять это.
Файл может быть файлом для текущего открытого буфера или другим.
[RO]
на строку состояния).fugitive
нужен путь от корня хранилища. Ответ уже покрывает это, но я ошибочно предположил, что беглец мог понять, когда мы находимся в определенном подкаталоге репо.Это немного шире, чем то, что просил OP, но для людей, не желающих использовать плагины и, возможно, другие системы контроля версий, этот небольшой фрагмент имеет тенденцию работать довольно хорошо:
Он создает новое окно и показывает там файл, считывая вывод данной команды в новый буфер. Это, конечно, работает с любой внешней командой, а не только с git.
Пример для bzr (где синтаксис REV может указывать ветку):
Пример для hg (не уверен насчет веток в hg; не используйте его достаточно)
Пример для SVN (
Вы все еще, вероятно, захотите установить тип файла для подсветки синтаксиса, как в сообщениях SO, но, по крайней мере, вам не нужно возиться с трубопроводами.
Открыв его, вы можете сохранить его под новым именем с помощью
:w filename
или:saveas filename
, поскольку у Vim еще не будет имени файла. Если вы не хотите иметь возможность редактировать его, вы также можете добавить:setlocal readonly
и и / или:setlocal nomodifiable
.Редактировать: Автоматический тип файла
Это немного больше работы, но вы можете попросить Vim угадать тип файла с
Но, поскольку у Vim еще нет имени, это не всегда работает хорошо (например, я вытащил некоторый C-код, и он догадался
filtype=conf
.Мы можем дать ему имя, сохранив его, но мы не хотим перезаписывать возможно существующий файл. Мы также можем просто установить имя файла (Спасибо @PeterRincker!), Но опять же, мы не хотим рисковать коллизиями. Так как маловероятно, что существует файл, который является как отчеством, так и именем файла вместе, мы объединяем их с некоторым произвольным разделителем
Где
"file"
заменяется фактическим именем файла и"branch"
именем ветвиКонечно, на данный момент мы почти пишем плагин ;-)
Подводя итог всему этому, вот как специфическая функция git, которую вы можете добавить в свой vimrc:
который вы можете заключить в команду или вызвать непосредственно, например
call GitFile("whateverBranch","myfile.c")
. Вы получите новое окно с буфером с именемwhateverBranch-myfile.c
источник
:file
имени файла вместо временного файла. Смотрите:h :file