Pertanyaan saya mirip dengan ini bagaimana memonitor file teks secara realtime
tetapi saya ingin melakukannya di vim. Saya tahu saya dapat membaca file menggunakan file yang dibuka tail -f sample.xml
, dan ketika konten baru ditulis ke file, itu juga akan menulis konten baru ke layar saya. Dapatkah saya meminta vim secara otomatis mengisi data baru ketika file diperbarui?
104
autoread
kerja dan batasannya.Tidak tahu tentang otomatis, tetapi Anda dapat mengetik:
untuk memuat ulang file
sumber
Letakkan yang berikut ini di
.vimrc
:sumber
seperti yang dikatakan @flukus dalam komentar ke jawaban sebelumnya, Anda bisa
call feedkeys["lh"]
(ini menggerakkan kursor ke kanan dan kembali ke kiri, yang biasanya tidak membahayakan saat melihat file log)Jadi, jika Anda menggabungkan sisa jawaban yang Anda miliki, Anda dapat menjalankan dari ex (whithin vim) saat diperlukan:
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(jika Anda ingin melompat (hampir) ke bagian akhir file, cukup gunakan "G", bukan "lh" dengan tombol umpan)
Penjelasan:
- autoread : membaca file ketika diubah dari luar (tetapi tidak berfungsi sendiri, tidak ada timer internal atau semacamnya. Ini hanya akan membaca file ketika vim melakukan tindakan, seperti perintah di ex
:!
- CursorHold * checktime : ketika kursor tidak digerakkan oleh pengguna untuk waktu yang ditentukan dalam 'updatetime' (yang defaultnya adalah 4000 milidetik), waktu pemeriksaan dijalankan, yang memeriksa perubahan dari luar file
- panggil feedkeys ("lh") : kursor digerakkan sekali, ke kanan dan ke kiri. dan kemudian tidak ada yang terjadi (... yang berarti, CursorHold dipicu, yang berarti kita memiliki loop )
Selain itu Anda bisa
:set syntax=logtalk
mewarnai logUntuk menghentikan pengguliran saat menggunakan
call feedkeys("G")
, jalankan:set noautoread
- sekarang vim akan memberi tahu, bahwa file telah diubah dan tanyakan apakah ada yang ingin membaca perubahan atau tidak)(Apakah ini memiliki efek samping?)
Edit: Saya melihat satu efek samping: jika seseorang menggunakan "G" sebagai feedkey, itu akan menggulir ke bawah setiap buffer yang saat ini dibuka ?! Jadi, tidak mungkin bekerja di buffer kiri jendela splittet sementara buffer kanan menggulir ke bawah file log secara otomatis
sumber
Tempelkan ini di .vimrc Anda dan itu akan bekerja seperti bos. (Diambil dari: http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_externally )
sumber
CursorHold
dijalankan sekali . Jadi jika Anda pergi dan minum kopi, atau melakukan sesuatu di Jendela lain, itu tidak akan diperbarui.Tail Bundle harus melakukan apa yang Anda inginkan. Catatan, belum pernah menggunakannya sendiri.
sumber
Jika unix + neovim
:term tail -f <filename>
Jelas ini tidak akan berhasil untuk semua orang, tapi begitulah cara saya melakukannya.
sumber
Ada juga plugin:
https://github.com/djoshea/vim-autoread
Ini adalah satu-satunya cara agar saya dapat membuat ini berfungsi di OSX.
sumber
VIM akan memperingatkan Anda ketika file telah diperbarui sehingga Anda tidak menimpa perubahan yang telah dibuat sejak Anda membukanya. Ini akan meminta Anda pada saat itu untuk memuat ulang file.
sumber