Jika Anda memiliki versi Vim yang cukup baru (tidak yakin yang mana, tetapi jika Anda menjalankannya vim --version
, Anda harus melihatnya +timers
), Anda dapat mengatur timer asinkron untuk memeriksa apakah file telah dimodifikasi, dan menjalankan yang lain cfile errors.txt
untuk memuat ulang perbaikan cepat isi jendela. Berikut ini adalah konsep bukti (periksa di sini untuk versi yang disorot sintaksis):
" 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
Jika Anda memasukkannya ke dalam .vimrc
, atau di file terpisah ~/.vim/plugins/
, Anda akan mendapatkan :Cfile
perintah yang dapat Anda gunakan seperti yang "asli", kecuali yang ini juga akan memantau file yang Anda berikan untuk perubahan setiap 200ms. Ini akan berhenti memperbarui secara otomatis ketika file dihapus.
Sayangnya, saya cukup yakin akan ada kasus tepi yang harus Anda tangani, jadi saya sarankan Anda menggunakan ini sebagai titik awal, cobalah untuk memahaminya (dengan menggunakan :help
untuk fungsi atau perintah yang Anda tidak perlu tidak tahu tentang), dan membangun sesuatu yang sesuai dengan kebutuhan spesifik Anda.