Eu sou novo no mundo do Vim e quero fazê-lo para que toda vez que eu salvar um arquivo, ele seja comprometido com o controle de versão. Isso é possível?
11
Você pode usar os comandos automáticos do Vim:
:autocmd BufWritePost * execute '!git add % && git commit -m %'
Isso não foi testado, mas deve adicionar o arquivo e confirmar com o nome do arquivo como mensagem de confirmação.
Você deseja o BufWritePost, pois isso é acionado após a gravação do arquivo. Eu imagino que existem muitos casos extremos enfadonhos ou inseguros.
Eu uso um comando automático do vim que coloco no meu .vimrc. O comando primeiro faz uma verificação grosseira de que estamos trabalhando em um diretório git (verificando a existência de um diretório .git, no diretório atual ou em uso git rev-parse
), e depois usa-o git -a -m %
para que apenas os arquivos adicionados anteriormente sejam testados e confirmados .
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
, a partir de uma resposta SOVocê pode querer olhar para o plugin fugitivo , é um plugin git muito poderoso para o vim. Você também pode configurar um
autocmd
comodonothingsuccessfully
sugere, mas ele deve aparecer:Gcommit
ou:Gstatus
(a partir do qual você pode escolher as alterações para adicionar ao índice git)fonte
Com base nas respostas fornecidas por outras pessoas:
Isso é completamente transparente. Você não receberá a mensagem "Pressione Enter para continuar" (mas se o commit não funcionou, você não saberá que falhou).
fonte
Você certamente poderia fazer isso com uma macro ou com o remapeamento de comando.
(Verifique /programming/117150/can-i-re-map-commands-in-vim )
Não tenho certeza se é uma boa opção. Por enquanto não sou proficiente em git e sei que às vezes é diferente de svn. Mas eu não faria isso automaticamente com o svn. A confirmação precisa ser significativa e não salvar algumas vezes regularmente.
Você normalmente confirma porque adicionou uma função, corrigiu um bug ... não apenas porque trabalhou em um arquivo. Você não terminará com projeto não compilado ou função inacabada.
fonte
Sei que essa pergunta é antiga e é uma autopromoção flagrante, mas escrevi um plug-in do Vim que acionará certos scripts de shell para serem executados após
autocmd
eventos específicos do Vim . Por exemplo, um script chamado.bufwritepost.vimhook.sh
seria executado (de forma síncrona) toda vez que oBufWritePost
comando fosse acionado. Você pode incluir facilmente qualquer lógica que desejar para executar o commit git dentro desse script. O plug-in assume convenções de nomenclatura específicas desses scripts e também suporta scripts "hook", que são acionados apenas em arquivos que correspondem a determinados nomes ou que possuem determinadas extensões.Detalhes completos: https://github.com/ahw/vim-hooks
fonte
Quero relatar minha opinião sobre esse problema.
Eu tenho o
vimrc.vim
em um repositório git ($VIMCONF
, com um bootstrap .vimrc) e mapeado<Leader>ve
("vim edit") para abrir o vimrc em uma nova guia. Isso não afeta o diretório de trabalho atual.Portanto, se eu editar a
vimrc.vim
partir de um vim iniciado em um diretório diferente fora do meu repositório vim git, a abordagem discutida por Nick Edwards falhará. Meu hack é o seguinte (para windows e linux)Explicação:
git
tem de estar no caminho (ou seja, você deve ser capaz de escrevergit <ENTER>
emcmd.exe
)tempdir
Notas:
|
. A cadeia será interrompida se algum dos comandos falhar. Para quebrar várias linhas, inicie a próxima linha com\
.*.vim
eexpand($VIMCONF)."/ftplugin/"
fonte