2009-05-15 4 views
19

Я хочу использовать gvim для просмотра файла журнала, который постоянно обновляется, так что я всегда вижу последнюю обновленную строку, очень похожую на команду tail в unix. Является ли это возможным?хвост как функциональность для gvim

+0

возможный дубликат [Использование VIM как логфайл-просмотра] (http://stackoverflow.com/questions/785389/using -vim-as-a-logfile-viewer) – feuGene

+0

Указывает gvim, другой - vim. Это решение не работает для vim, поэтому это отдельный вопрос AND и отдельный ответ. НЕ дубликат. – iconoclast

ответ

38

Открыть файл_журнала и

:setlocal autoread 

Существует плагин (Tail Bundle) на vim сайте.

+0

Как использовать плагин Tail Bundle? Я просмотрел документы, и никто из них, похоже, не загрузил файл? – ewok

2

Или менее элегантное решение на vim 7.x было бы просто: e! когда вам нужно обновление.

+3

Извините за то, что вы отметили этот ответ, но это именно то, что Canopus пытался НЕ делать ... «постоянно обновляемый, такой, что я всегда вижу последнюю обновленную строку», не разрешается ': e!' Всякий раз, когда вам нужно обновление , – pvandenberk

+0

признал, будет внимательно изучать вопросы. – user28095

0

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

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

и, кроме того вы можете :set syntax=logtalk окрашивать В журнале

(если вы хотите, чтобы прыгать (почти) до конца файла, просто использовать «G» вместо «ЛХ» с feedkeys)

Объяснение:

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

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

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

Смежные вопросы