Если у вас достаточно свежая версия Vim (не знаю, какая именно, но если вы запускаете vim --version
, вам нужно увидеть +timers
), вы можете установить асинхронный таймер, чтобы проверить, был ли файл изменен, и запустите другой cfile errors.txt
чтобы перезагрузить содержимое окна быстрого исправления. Вот доказательство правильности концепции (проверьте здесь для подсвеченной версии):
" 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
Если вы поместите это в ваш .vimrc
или в отдельный файл в ~/.vim/plugins/
, вы получите команду :Cfile
вы можете использовать точно так же, как и "настоящую", за исключением того, что она также будет контролировать файл Вы дали это для изменений каждые 200 мс. Он остановит автообновление при удалении файла.
К сожалению, я почти уверен, что будут крайние случаи, о которых вам придется позаботиться, поэтому я рекомендую вам использовать это как отправную точку, попытаться понять это (используя :help
для любых функций или команд, которые вы не знаю), и построить что-то, что соответствует вашим конкретным потребностям.