Dengan asumsi bahwa suatu file tidak memiliki perubahan yang belum disimpan dalam buffer VIM, saya ingin memuat ulang secara otomatis jika file berubah pada disk. Kasus penggunaan paling sering untuk ini adalah ketika saya memperbarui copy pekerjaan di mana file berada.
Bagaimana saya bisa mencapai ini?
Jawaban:
Di Anda
~/.vimrc
:sumber
autoread
hanya akan memicu setelah menjalankan perintah eksternal. Jawaban ini merinci solusinya.Inilah yang bekerja untuk saya
Baris pertama tidak cukup dengan sendirinya. Anda bisa memasukkan Anda ke dalam
.vimrc
kredit untuk Phan Hai Quang
sumber
:help timestamp
" tampaknya menunjukkan bahwa saya yang salah, dan bahwa Vim hanya melakukan pemeriksaan pada peristiwa tertentu, jadi autocmd bisa diperlukan untuk membuatnya memeriksa lebih sering.Autoread tidak berfungsi dengan benar. Berikut ini berfungsi untuk saya:
Anda harus menginstal skrip terlebih dahulu dari sini .
Saya mendapatkan hasil terbaik dengan memanggil fungsi pengaturan secara langsung, seperti itu.
Alasan untuk ini, adalah bahwa saya ingin menjalankan pengaturan ipython / layar / vim.
Anda dapat dengan mudah mengubahnya menjadi versi tampilan yang disempurnakan.
skrip proses ..
sumber
Plugin vim-autoread telah bekerja untuk saya sejauh ini:
sumber
j
) untuk melihat pembaruan yang efektif. Saya membuat masalah di sini tentang ini: github.com/djoshea/vim-autoread/issues/3dari jawaban ini (merujuk ke jawaban oleh PhanHaiQuang dan komentar oleh @flukus)
Seseorang dapat menjalankan oneliner ini dari ex (whithin vim) saat dibutuhkan (atau menempatkan setiap perintah dalam vimrc, untuk saat file log dibuka.)
:set autoread | au CursorHold * checktime | call feedkeys("lh")
Penjelasan:
- autoread : membaca file ketika diubah dari luar (tetapi tidak bekerja sendiri, tidak ada timer internal atau sesuatu seperti itu. Itu hanya akan membaca file ketika vim melakukan suatu tindakan, seperti perintah dalam ex
:!
- CursorHold * checktime : ketika cursor tidak dipindahkan oleh pengguna untuk waktu yang ditentukan dalam 'updatetime' (yang secara default 4000 milidetik) dijalankan, yang memeriksa perubahan dari luar file
- panggilan feedkeys ("lh") : kursor dipindahkan satu kali, kanan dan kiri kiri. dan kemudian tidak ada yang terjadi (... yang berarti, bahwa CursorHold dipicu, yang berarti kita memiliki loop )
sumber
lh
tidak melakukan apa-apa, jika kursor berada pada posisi terakhir di telepon,lh
akan mengubah lokasinya.Ada beberapa plugin yang tercantum di sini yang mungkin berfungsi tergantung pada versi Vim Anda.
Pendekatan lain adalah mengirim
checktime
perintah secara berkala ke vim dari proses eksternal. Berikut ini skrip ShellJS untuk melakukan ini (memerlukanshelljs-plugin-sleep
, NeoVim, dannvr
)sumber