Bagaimana agar tail -f menunjukkan keluaran berwarna dengan vim?

9

Dalam pertanyaan ini , Gilles menjawab

Namun kemungkinan lain adalah untuk menjalankan tail -fdalam buffer shell Emacs dan menggunakan kemampuan pewarnaan sintaks Emacs.

Karena saya pengguna vim, saya ingin melakukan ini dengan vim , bukan emacs .
Apakah vim memiliki fitur ini?

Benjamin
sumber
2
Vim hanyalah editor teks, tidak seperti Emacs ... Namun, ada plugin ekor untuk Vim yang mungkin berguna.
jasonwryan
Ada juga plug-in vimpager yang dapat melakukan trik
bsd
1
apakah itu harus menjadi editor teks? Jika Anda hanya perlu mewarnai teks, Anda dapat menggunakan Clide
golimar
Selain itu, ada TailBundle untuk vim.
jofel
Ada pertanyaan serupa di sini . Solusi menjelaskan penggunaan multitail dan cara mengkonfigurasinya, mungkin ini bisa berguna.
logoff

Jawaban:

2

Anda dapat menulis plugin multithread untuk mengubah buffer secara real time dalam Python atau skrip lain yang didukung dan memiliki utas Vim.

Tapi ini hanya berfungsi di terminal sejauh yang saya tahu. Setidaknya di X11, versi GUI akan mogok jika GUI dimodifikasi oleh utas lainnya.

Jika Anda menerima program lain, grc dan ccze dapat mewarnai aliran.

lilydjwg
sumber
0

Saya suka pendek dan tanpa banyak peretasan atau skrip eksternal. Anda dapat menjalankan oneliner ini dari ex (whithin vim) saat dibutuhkan (atau letakkan setiap perintah di vimrc, untuk saat file log dibuka.)

:set autoread | au CursorHold * checktime | call feedkeys("lh")

dan juga Anda bisa :set syntax=logtalkmewarnai log

(jika Anda ingin melompat (hampir) ke akhir file, cukup gunakan "G" dan bukan "lh" dengan feedkey)

Penjelasan:

  • autoread: membaca file ketika diubah dari luar (tetapi tidak bekerja dengan sendirinya, tidak ada timer internal atau sesuatu seperti itu. 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 dalam updatetime(yang merupakan 4000 milidetik secara default) checktimedieksekusi, yang memeriksa perubahan dari luar file
  • call feedkeys("lh"): kursor dipindahkan satu kali, kanan dan kiri kiri. dan kemudian tidak ada yang terjadi (... yang berarti, yang CursorHolddipicu, yang berarti kita memiliki perulangan )

Untuk 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)

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 logfile, 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 )

eli
sumber