Você pode usar o comando :edit
, sem especificar um nome de arquivo, para recarregar
o arquivo atual. Se você fez modificações no arquivo, você pode usar
:edit!
para forçar o recarregamento do arquivo atual (você perderá seu
modificações).
Eu tenho um arquivo de configuração que eu mantenho aberto no vim, mas que às vezes é alterado no disco, sem que essas alterações sejam refletidas no terminal. Posso atualizar o conteúdo na tela sem fechar e reabrir o arquivo? Se sim, como?
Você pode usar o comando :edit
, sem especificar um nome de arquivo, para recarregar
o arquivo atual. Se você fez modificações no arquivo, você pode usar
:edit!
para forçar o recarregamento do arquivo atual (você perderá seu
modificações).
Além de atualizar manualmente o arquivo com :edit
, você pode colocar em seu ~/.vimrc
:set autoread
para que o Vim atualize automaticamente todos os arquivos que não foram editados pelo Vim. Veja também :checktime
.
Pule para o cabeçalho Wrap-up
das linhas vimrc
a adicionar para melhorar sua vida.
Execute :checktime
Check if any buffers were changed outside of Vim. This checks and warns you if you would end up with two versions of a file.
Para carregar automaticamente as alterações, adicione seu vimrc
:
When a file has been detected to have been changed outside of Vim and it has not been changed inside of Vim, automatically read it again. When the file has been deleted this is not done.
Esta resposta adiciona uma ressalva:
Autoread does not reload file unless you do something like run external command (like
!ls
or!sh
etc)
Leia as soluções.
Adicione ao seu vimrc
:
au CursorHold,CursorHoldI * checktime
Por padrão, CursorHold é acionado depois que o cursor permanece parado por 4 segundos e é configurável via updatetime .
Adicione o seguinte ao seu vimrc
para acionar autoread
ao alterar os buffers enquanto dentro vim:
au FocusGained,BufEnter * :checktime
Para que o FocusGained
(veja acima) trabalhe no vim simples, dentro de um emulador de terminal (Xterm, tmux, etc) instale o plugin:
vim-tmux-focus-events
Nas versões do tmux > 1.9, você precisará adicionar .tmux.conf
:
set -g focus-events on
Notificações quando autoread
de acionadores também são possíveis .
Aqui estão as minhas vimrc
linhas para implementar todas as opções acima:
" Triger 'autoread' when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
autocmd FocusGained,BufEnter,CursorHold,CursorHoldI * if mode() != 'c' | checktime | endif
" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
\ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None
Agradecemos a ErichBSchulz por me apontar na direção certa com au CursorHold
.
Tags vim