Frequentemente, estou trabalhando com arquivos controlados por versão, portanto, é possível fazer alterações neles fora do Vim.
Qual é uma maneira rápida de recarregar o arquivo sem precisar fechar e reabrir o Vim? E existe uma maneira de fazer isso automaticamente?
file-operations
load
Kevin Brown
fonte
fonte
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>
:h vim-faq
e pesquisar/reload
. A tag difícil de memorizar é:h faq-5.8
.Respostas:
O comando que você deseja é
:e
(abreviação de:edit
). Se você usá-:edit!
lo, descartará as alterações locais e recarregará.Você também pode fazer com que o vim faça isso automaticamente com
set autoread
o vimrc.fonte
autoread
.:bufdo :e
ou:bufdo :e!
:
é opcional::bufdo e
funcionará da mesma maneira.Em muitos casos,
set autoread
não funcionará, pois esta resposta explica:Os eventos de foco serão acionados
autoread
, mas eles não serão capturados, a menos que sejam utilizadosgvim
. Portanto, se estiver rodando sem problemasvim
dentro de uma janela de terminal ou tmux, instale o plug - in vim-tmux-focus-events .Nas versões tmux> 1.9, você precisará adicionar
.tmux.conf
:Para maior utilidade, adicionar o seguinte ao seu
vimrc
acionaráautoread
ao alterar os buffers dentro e dentro do vim:fonte
Se você já executou um comando externo do Vim que modifica o buffer atual, pode ter notado que ele solicita que você recarregue o arquivo, pois as alterações foram feitas no disco. Você pode realmente chamar esse prompt usando o
:checktime
comandofonte
Bom plugin para melhorar
autoread
https://github.com/djoshea/vim-autoreadfonte
Eu tive o problema de examinar o conteúdo de um arquivo, atualizar o arquivo externamente, exibir o arquivo alterado e ter a opção de editá-lo quando necessário. Eu o resolvi com as opções de linha de comando remota / servidor Vim, inspiradas nesta resposta .
Com os seguintes comandos, um arquivo pode ser recarregado através de um comando externo. Primeiro, abra o arquivo em questão com o Vim, enquanto inicia uma instância do servidor.
Vamos supor que o arquivo tenha sido alterado externamente, por exemplo, por a
echo "Curiouser and curiouser" >> /tmp/alice.log
. Quando necessário, envie um comando para a instância do servidor para recarregar o arquivo. Este comando será concluído rapidamente e não gerará um novo editor.Se o arquivo aberto foi alterado no Vim e externamente, haverá um conflito durante a recarga (uma mensagem de aviso será exibida). Nesse caso, é necessário tomar uma decisão: deixe com isso e mantenha as alterações no Vim ou descarte as alterações locais e force a recarga .
O comando
--remote-send
acima requer recarregamento manual. No entanto, esse comando pode ser vinculado a um loop simples, usando ofor
/ do Bashwhile
, ou usando um liner hacky no Linux / Unix:Embora não tenha sido testado, tenho certeza de que algo assim também pode ser realizado no PowerShell.
No Linux / Unix, uma abordagem orientada a eventos pode ser realizada ouvindo os eventos do sistema de arquivos usando, por exemplo, a biblioteca inotify , se você não estiver usando sistemas de arquivos muito loucos. Pessoalmente, gosto muito de usar a ferramenta entr , que parece estar incluída nas principais distribuições Linux. Então eu recebo:
fonte