Como o vim me notifica automaticamente quando um arquivo que estou editando é alterado?

7

Eu tenho uma situação em que às vezes meu amigo e eu estamos trabalhando no mesmo arquivo ao mesmo tempo.

O Vim me dirá se o arquivo foi alterado quando tento substituí-lo. Posso o vim me notificar assim que o arquivo mudar, por si só, antes de salvar?

Ponto de interrogação
fonte
O que você quer que aconteça se ambos mudaram a mesma linha?
Martin Tournoij 24/03
@Carpetsmoker Hmmm ... Difícil. Talvez isso possa aparecer uma mensagem ou algo assim. Estou aberto a sugestões sobre isso.
Questionmark
Mas qual seria o comportamento desejado que você está esperando? Que o Vim não apenas recarregue as alterações, mas realmente mostre algo como uma mensagem pop-up na área de trabalho ou evite que o Vim recarregue automaticamente as alterações e mostre uma mensagem de aviso, permitindo que você decida o que fazer?
Javier Scappini 25/03
@JavierScappini Either. Eu não sou tão exigente. Eu acho que seria legal tê-lo carregar automaticamente as alterações ...
Questionmark
Minha resposta aqui tem algumas informações sobre a autoreadconfiguração e suas limitações ... possivelmente essa também é uma resposta para esta pergunta?
Martin Tournoij 25/03

Respostas:

5

Você tentou a autoreadopção? De :help 'autoread':

Quando for detectado que um arquivo foi alterado fora do Vim e não foi alterado dentro do Vim, leia-o automaticamente novamente.

Javier Scappini
fonte
Note que autoreadé bastante limitado; apenas verifica se o arquivo é alterado quando determinados eventos ocorrem. Veja também minha resposta aqui .
Martin Tournoij 28/06/2015
3

Esta pergunta foi respondida no StackOverflow: Como funciona a leitura automática do Vim?

Solução 1

Siga as explicações na página Wikia do Vim Faça com que o Vim verifique automaticamente se o arquivo foi alterado externamente . Esta solução requer a adição de uma função ao seu arquivo vimrc e que um novo comando seja chamado nos buffers que você deseja assistir.

Solução 2

Essa solução foi proposta por @GregSexton na pergunta que eu vinculei acima. A idéia é forçar a verificação de modificação sempre que um dos seguintes itens ocorrer:

Você pode encontrar o código que implementa isso abaixo:

augroup checktime
    au!
    if !has("gui_running")
        "silent! necessary otherwise throws errors when using command
        "line window.
        autocmd BufEnter        * silent! checktime
        autocmd CursorHold      * silent! checktime
        autocmd CursorHoldI     * silent! checktime
        "these two _may_ slow things down. Remove if they do.
        autocmd CursorMoved     * silent! checktime
        autocmd CursorMovedI    * silent! checktime
    endif
augroup END

Adicione e / ou remova da autocmdforma mais adequada ao seu fluxo de trabalho. Confira aqui a lista de eventos que podem ser usados.

Se Autoread também é habilitado, o arquivo será lido automaticamente se não for modificado:

set autoread
Vitor
fonte