Использование VIM в качестве средства просмотра журналов

Я хотел бы использовать VIM в качестве средства просмотра журналов. Можно ли перезагрузить текущий файл в течение обычного интервала времени (~ 1 с)?

Ответы

Ответ 1

использовать :set autoread

Ответ 2

См. этот VIM tip. Он предлагает хвостовик (например, tail -f) вместе с нумерацией строк журнала

Ответ 3

Мне нравится это коротко и без большого количества хакеров или внешних скриптов. Вы можете запустить этот oneliner из ex (whithin vim), когда это необходимо (или поместить каждую команду в vimrc, поскольку при открытии журнальных файлов.)

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

(если вы хотите прыгать (почти) в конец файла, просто используйте "G" вместо "lh" с ключами-ключами)

Пояснение:

  • autoread: читает файл при изменении извне (но он не работает сам по себе, нет внутреннего таймера или что-то в этом роде. Он будет читать только файл, когда vim выполняет действие, например команду в ex :!
  • CursorHold * checktime: когда курсор не перемещается пользователем в течение времени, указанного в updatetime (который по умолчанию составляет 4000 миллисекунд), выполняется checktime, который проверяет наличие изменений вне файла
  • call feedkeys("lh"): курсор перемещается один раз, вправо и назад влево. и тогда ничего не происходит (... что означает, что срабатывает CursorHold, что означает, что мы имеем цикл)

Чтобы остановить прокрутку при использовании call feedkeys("G"), выполните :set noautoread - теперь vim скажет, что файл был изменен и спросили, хотите ли вы прочитать изменения или нет)

Мне нравится идея смотреть лог файлы в vim (вместо tail -f), например. когда вы работаете в сеансе ssh без экрана /tmux. Кроме того, вы можете скопировать непосредственно из файла журнала, если необходимо, или сохранить вывод напрямую или... что вы можете сделать с помощью vim:)

* из этого ответа (ссылаясь на ответ PhanHaiQuang и комментарий flukus)