Se você tiver uma versão recente do Vim (não sei qual, mas se você executar vim --version
, precisará ver +timers
), poderá definir um temporizador assíncrono para verificar se o arquivo foi modificado e execute outro cfile errors.txt
para recarregar o conteúdo da janela de quickfix. Aqui está uma prova de conceito (confira aqui para uma versão destacada da sintaxe):
" The filename used for the cfile
let s:cfile_filename = ''
" The last mtime of the filename
let s:cfile_mtime = -1
" Define a command that can be called like:
"
" Cfile errors.txt
"
command! -nargs=1 -complete=file Cfile call s:Cfile(<f-args>)
function! s:Cfile(filename)
let s:cfile_filename = a:filename
" Update every 200ms
let timer = timer_start(200, function('s:UpdateCfile'), {'repeat': -1})
" First "update" to actually load the qf window immediately
call s:UpdateCfile(timer)
endfunction
function! s:UpdateCfile(timer_id)
" Stop the timer if the file is deleted
if s:cfile_filename == '' || !filereadable(s:cfile_filename)
call timer_stop(a:timer_id)
let s:cfile_filename = ''
let s:cfile_mtime = -1
return
endif
" Get file mtime
let mtime = system('stat -c %Y '.shellescape(s:cfile_filename))
" Load the file in the quickfix window if the mtime is newer than the last
" recorded one
if mtime > s:cfile_mtime
exe 'cfile '.s:cfile_filename
let s:cfile_mtime = mtime
endif
endfunction
Se você colocar isso no seu .vimrc
, ou em um arquivo separado em ~/.vim/plugins/
, você receberá um comando :Cfile
que você pode usar como o "real", exceto que este também irá monitorar o arquivo que você deu para mudanças a cada 200ms. Parará a atualização automática quando o arquivo for excluído.
Infelizmente, tenho certeza de que haverá casos de limites que você deve resolver, então eu recomendo que você use isso como ponto de partida, tente entendê-lo (usando :help
para qualquer funções ou comandos que você não conhece) e construa algo que se adapte às suas necessidades específicas.