Eu gostaria de abrir um arquivo de outra ramificação no repositório git atual. Eu já vi essa pergunta SO , mas as sugestões para combiná-la com o Vim são complicadas (canal para o Vim, stdin aberto, conjunto de tipo de arquivo etc. manualmente). Existe uma maneira mais simples de reter o realce da sintaxe, as configurações de tipo de arquivo etc.?
Se ajudar:
- Eu tenho o plugin fugitivo instalado (embora raramente usado).
- Não preciso modificá-lo.
O arquivo pode ser o arquivo para o buffer aberto no momento ou outro.
[RO]
na linha de status).fugitive
precisa do caminho da raiz do repositório. A resposta já cobre isso, mas assumi erradamente que o fugitivo poderia entender quando estamos em um subdiretório específico do repositório.Isso é um pouco mais amplo do que o OP pediu, mas para as pessoas que não desejam usar plug-ins e possivelmente outros sistemas de controle de revisão, esse pequeno trecho tende a funcionar razoavelmente bem:
Ele cria uma nova janela e mostra o arquivo lá, lendo a saída do comando fornecido no novo buffer. Obviamente, isso funciona com qualquer comando externo, não apenas com o git.
Exemplo para bzr (onde a sintaxe REV pode especificar uma ramificação):
Exemplo para hg (não tenho certeza sobre ramificações em hg; não use o suficiente)
Exemplo para svn (
Você provavelmente ainda deseja definir o tipo de arquivo para obter destaque de sintaxe, como nas postagens de SO, mas pelo menos não precisa mexer na tubulação.
Depois de aberto, você pode salvá-lo com um novo nome com
:w filename
ou:saveas filename
, pois o Vim ainda não terá um nome de arquivo para ele. Se você não quiser editá-lo, também pode inserir um:setlocal readonly
e / ou:setlocal nomodifiable
.-Editar: Tipo de arquivo automático-
É um pouco mais trabalhoso, mas você pode pedir ao Vim para adivinhar o tipo de arquivo com
Mas, como o Vim ainda não tem um nome, isso nem sempre funciona bem (por exemplo, eu inseri um código C e ele adivinhou
filtype=conf
.Podemos dar um nome a ele salvando-o, mas não queremos sobrescrever um arquivo possivelmente existente. Também podemos definir o nome do arquivo (Obrigado @ PeterRincker!), Mas, novamente, não queremos arriscar colisões. Como é improvável que exista um arquivo com o nome da filial e o nome do arquivo juntos, concatená-los-emos com um separador arbitrário
Onde
"file"
é substituído pelo nome do arquivo real e"branch"
pelo nome da ramificaçãoClaro, neste momento estamos quase escrevendo um plugin ;-)
Jogando tudo junto, aqui está como uma função específica do git que você pode colocar no seu vimrc:
que você pode agrupar em um comando ou ligar diretamente, por exemplo
call GitFile("whateverBranch","myfile.c")
. Você receberá uma nova janela com um buffer chamadowhateverBranch-myfile.c
fonte
:file
nome do seu arquivo em vez de ter um arquivo temporário. Veja:h :file