Мой вопрос аналогичен тому, как отслеживать текстовый файл в реальном времени,
но я хочу сделать это в vim. Я знаю, что могу читать открытый файл использования tail -f sample.xml
файла, и когда новый контент будет записан в файл, он также запишет новый контент на мой экран. Могу ли я сделать так, чтобы vim автоматически заполнял новые данные при обновлении файла?
105
autoread
работает и его ограничениях.Не знаю об автомате, но вы можете ввести:
перезагрузить файл
источник
Поместите следующее в свой
.vimrc
:источник
как @flukus сказал в комментарии к предыдущему ответу, вы можете
call feedkeys["lh"]
(он перемещает курсор вправо и обратно влево, что обычно не вредит при просмотре файла журнала)Итак, если вы объедините оставшуюся часть ответа, у вас есть oneliner, который вы можете запустить из ex (whithin vim) при необходимости:
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(если вы хотите перейти (почти) к концу файла, просто используйте «G» вместо «lh» с клавишами подачи)
Объяснение:
- autoread : читает файл при изменении извне (но он не работает сам по себе, нет внутреннего таймера или чего-то подобного. Он будет читать файл только тогда, когда vim выполняет действие, например команду в ex
:!
- CursorHold * checktime : когда курсор не перемещается пользователем в течение времени, указанного в 'updatetime' (которое по умолчанию составляет 4000 миллисекунд), выполняется checktime, который проверяет наличие изменений извне файла
- вызовите feedkeys («lh») : курсор перемещается один раз вправо и назад влево. а затем ничего не происходит (... это означает, что CursorHold срабатывает, что означает, что у нас есть цикл )
Дополнительно вы можете
:set syntax=logtalk
раскрасить журналЧтобы остановить прокрутку при использовании
call feedkeys("G")
, выполните:set noautoread
- теперь vim сообщит, что файл был изменен, и спросит, хочет ли кто-то прочитать изменения или нет)(Есть ли у этого побочные эффекты?)
Изменить: я вижу один побочный эффект: если использовать «G» в качестве клавиши подачи, он будет прокручивать вниз каждый текущий открытый буфер ?! Таким образом, невозможно работать в левом буфере разделенного окна, когда правый буфер автоматически прокручивает файл журнала вниз.
источник
Вставьте это в свой .vimrc, и он должен работать как босс. (Взято с: http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_external )
источник
CursorHold
выполняется один раз . Поэтому, если вы уходите и пьете кофе или делаете что-то в другом окне, оно не обновляется.Tail Bundle должен делать то, что вы хотите. Обратите внимание, сам не использовал.
источник
Если unix + neovim
:term tail -f <filename>
Очевидно, это не сработает для всех, но я так делаю.
источник
Также есть плагин:
https://github.com/djoshea/vim-autoread
Это был единственный способ заставить эту работу работать в OSX.
источник
VIM предупредит вас, когда файл был обновлен, чтобы вы не перезаписали изменения, сделанные с момента его открытия. В этот момент вам будет предложено перезагрузить файл.
источник