Saya ingin tahu apakah ada cara untuk membuat Vim berperilaku seperti tail -f
.
Bahkan plugin Vim terbaik yang saya temukan sejauh ini tidak melakukan apa yang saya harapkan.
Saya benar-benar ingin melihat pembaruan file secara real-time . Bahkan saya jauh dari keyboard, saya ingin Vim terus-menerus memuat ulang buffer dan melompat ke baris terakhir.
Bagaimana cara melakukannya?
(Saya tidak ingin memuat ulang seluruh file, karena beberapa file log sangat besar. Yang terbaik adalah hanya memuat baris terakhir, seperti tail -f
halnya.)
vim
? Ada apa dengan initail -f
?less +F
bukantail -f
. Tidak memberi Anda sorotan sintaks.Jawaban:
Anda tidak bisa
vim
bersikap seperti itutail -f
. Anda dapatless
berperilaku seperti kombinasivim
dantail -f
olah.Maju selamanya (ikuti) mode
less
memiliki mode penerusan selamanya yang dapat Anda masuki dengan menekan Fatau meneruskannya+F
sebagai argumen.Dalam mode ini,
less
berperilaku sepertitail -f
itu tidak berhenti membaca ketika mencapai akhir file. Terus-menerus diperbarui dengan data baru dari file. Untuk keluar dari mode ini, tekan Ctrlc.Penyorotan sintaksis
less
mendukung pemfilteran otomatis dari data yang dibacanya. Ada program yang disebut source-highlight yang dapat melakukan penyorotan kode sumber dasar. Muncul dengan skrip yang berfungsi dengan baikless
. Untuk menggunakannya, cukup aturLESSOPEN
variabel lingkungan dengan tepat.Anda juga harus memberitahu
less
untuk lulus urutan melarikan diri terminal mentah (ini memberitahu terminal Anda bagaimana cara mewarnai teks) dengan memberikannya-R
bendera. Anda dapat mengatakanless
untuk berpura-pura bahwa itu selalu dilewati-R
dengan menetapkanLESS
variabel lingkungan.Kapan
less
tidak cukupMeskipun
less
memiliki keybindings vi-seperti, itu tidak sama dengan Vim. Terkadang terasa asing dan tidak memiliki fitur penting seperti integrasi ctags dan kemampuan untuk mengedit teks.Anda dapat melakukan
less
panggilan Vim (dengan asumsiEDITOR=vim
) pada file yang sedang dilihatnya dengan menekan v.less
bahkan akan meletakkan kursor Anda di lokasi yang benar di dalam Vim. Ketika Anda keluar dari Vim, Anda akan menemukan diri Anda kembaliless
. Jika Anda membuat perubahan pada file saat Anda berada di Vim, mereka akan tercermin dalamless
.sumber
Sekarang, di shell lain (seperti bash), Anda dapat melakukan:
Di mana <C -> <CN> memaksa vim untuk pergi ke mode normal, "edit!" memberitahu vim untuk memuat ulang file saat ini (CR mensimulasikan menekan enter), dan G pergi ke bagian bawah file. Menghapus (G) membuatnya lebih mudah untuk menginstal file saat input masuk.
sumber
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 10 2013 02:28:47) Option inconnue: "--servername=toto" Plus d'info avec: "vim -h"
Saya menemukan jawabannya berkat komentar Evan Teitelman . Solusi saya terinspirasi dari /usr/share/vim/vimcurrent/macros/less.vim .
Saya membuat fungsi saya sendiri, tetapi itu bisa ditingkatkan banyak.
Dan tekan saja CTRL + C untuk keluar dari Tailf.
Untuk membuka file log dalam mode Tailf:
view -M "+call Tailf()" /path/to/logfile.log
Yang tidak saya sukai, adalah
sleep
panggilan, yang tidak memungkinkan untuk melakukan apa pun di vim selama penyegaran otomatis. Yang terbaik adalah jika buffer otonom dan memperbarui bahkan jika saya berada di jendela lain. Bagaimanapun, ini awal yang baik. :)sumber
:read
menunggu sampai file telah dimodifikasi dan jika sudah ditambahkan, membaca di baris di bagian bawah file.Metode non rekursif untuk hal yang sama:
sumber
Saya suka pendek dan tanpa banyak peretasan. Anda dapat menjalankan oneliner ini dari ex (whithin vim) saat dibutuhkan (atau letakkan setiap perintah di vimrc, untuk saat file log dibuka.)
(jika Anda ingin melompat (hampir) ke akhir file, cukup gunakan "G" daripada "lh" dengan feedkey)
Penjelasan:
autoread
: membaca file ketika diubah dari luar (tetapi tidak bekerja sendiri, tidak ada timer internal atau sesuatu seperti itu. Ini hanya akan membaca file ketika vim melakukan suatu tindakan, seperti perintah dalam ex:!
CursorHold * checktime
: ketika kursor tidak dipindahkan oleh pengguna untuk waktu yang ditentukan dalamupdatetime
(yang 4000 milidetik secara default)checktime
dieksekusi, yang memeriksa perubahan dari luar filecall feedkeys("lh")
: kursor dipindahkan satu kali, kanan dan kiri belakang. dan kemudian tidak ada yang terjadi (... yang berarti, yangCursorHold
dipicu, yang berarti kita memiliki loop )Untuk menghentikan pengguliran saat menggunakan
call feedkeys("G")
, jalankan:set noautoread
- sekarang vim akan memberi tahu, bahwa file telah diubah dan tanyakan apakah seseorang ingin membaca perubahan atau tidak)Saya suka ide untuk menonton file log dalam vim (bukan tail -f), misalnya ketika Anda bekerja dalam sesi ssh tanpa layar / tmux. Selain itu Anda dapat menyalin langsung dari file log, jika perlu, atau menyimpan output secara langsung atau ... apa pun yang dapat Anda lakukan dengan vim :)
* dari jawaban ini (merujuk pada jawaban oleh PhanHaiQuang dan komentar oleh flukus )
sumber
Sunting: Saya minta maaf, sepenuhnya dilewati karena Anda sudah mencoba ini.
Anda dapat mencoba menggunakan plugin Tail Bundle , saya pikir itu harus melakukan apa yang Anda cari.
Untuk menginstal, buka tail-3.0.vba dengan vim dan jalankan:
Mulai ulang dan Anda harus dapat mengekstrak file dari dalam vim seperti:
sumber
HANYA Untuk VIM 8.0+ mereka memperkenalkan timer, sehingga Anda dapat menggunakan timer untuk mensimulasikan fungsi ekor, ini bekerja cukup efektif dalam pengalaman saya.
Saya telah memetakan tombol F6 untuk menghidupkan ekor dan F7 untuk mematikan ekor, Anda dapat menyesuaikan yang ada di perintah di bawah ini, juga lihat bagian saya di bawah ini untuk KATA-KATA PERHATIAN.
Jalankan yang berikut ini
Anda juga dapat menjadikan perintah di atas sebagai bagian dari vimrc sehingga Anda selalu memilikinya.
Beberapa kata peringatan:
sumber
Dari dalam Vim, jalankan:
Itu akan menangguhkan Vim sementara anak bercabang dieksekusi
tail -f
pada buffer saat ini. Menekan akan Ctrl-Cmengembalikan Anda ke buffer di Vim.sumber
tail
melakukan pekerjaan. Vim portable. Ini bukan.