Я хотел бы знать, есть ли способ заставить Vim вести себя как tail -f
.
Даже самый лучший плагин Vim, который я нашел до сих пор, не делает то, что я ожидаю.
Я действительно хочу видеть обновление файла в режиме реального времени . Даже если я не на клавиатуре, я хочу, чтобы Vim постоянно перезагружал буфер и переходил к последней строке.
Как это сделать?
(Я не хочу перезагружать весь файл, поскольку некоторые файлы журнала очень большие. Лучше всего загружать только последние строки, как это tail -f
делает.)
vim
? Что не так сtail -f
?less +F
вместоtail -f
. Не дает вам подсветку синтаксиса.Ответы:
Вы не можете заставить
vim
себя вести себя какtail -f
. Вы можете заставитьless
себя вести себя как комбинацияvim
иtail -f
хотя.Вперед навсегда (следовать) режим
less
имеет прямой режим навсегда, в который вы можете войти, нажав Fили передав+F
ему аргумент.В этом режиме
less
ведет себя какtail -f
в том, что он не прекращает чтение, когда достигает конца файла. Он постоянно обновляется новыми данными из файла. Для выхода из этого режима нажмите Ctrlc.Подсветка синтаксиса
less
поддерживает автоматическую фильтрацию данных, которые он читает. Существует программа с именем source-highlight, которая может выполнять базовую подсветку исходного кода. Это идет со сценарием, который хорошо работает сless
. Чтобы использовать его, просто установитеLESSOPEN
переменную среды соответствующим образом.Вы также должны указать
less
передать необработанные escape-последовательности терминала (они сообщают вашему терминалу, как окрашивать текст), передав ему-R
флаг. Вы можете сказать,less
что ему всегда передают-R
флаг, установивLESS
переменную среды.Когда
less
не достаточноНесмотря на то, что у
less
него есть vi-подобные сочетания клавиш, это не то же самое, что Vim. Иногда он кажется чужим, и в нем отсутствуют важные функции, такие как интеграция ctags и возможность редактирования текста.Вы можете сделать
less
вызов Vim (при условииEDITOR=vim
) файла, который он просматривает в данный момент, нажав v.less
даже поместит курсор в правильном месте в Vim. Когда вы выйдете из Vim, вы снова окажетесь наless
. Если вы внесли какие-либо изменения в файл во время работы в Vim, они будут отражены вless
.источник
Теперь в другой оболочке (например, bash) вы можете сделать:
Когда <C -> <CN> заставляет vim перейти в обычный режим, "edit!" говорит vim перезагрузить текущий файл (CR имитирует нажатие клавиши ввода), и G переходит в конец файла. Удаление (G) облегчает вставку файла во время ввода.
источник
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"
Я нашел ответ благодаря комментарию Эвана Тейтельмана . Мое решение основано на /usr/share/vim/vimcurrent/macros/less.vim .
Я сделал свою собственную функцию, но она могла бы быть значительно улучшена.
И просто нажмите CTRL + C, чтобы выйти из Tailf.
Чтобы открыть файл журнала в режиме Tailf:
view -M "+call Tailf()" /path/to/logfile.log
Что мне не нравится, так это
sleep
вызов, который не позволяет делать что-либо в vim во время автообновления. Лучше всего, если буфер будет автономным и обновляется, даже если я нахожусь в другом разделенном окне. Во всяком случае, это хорошее начало. :)источник
:read
который ожидает, пока файл не будет изменен и, если он был добавлен, считывает строки в нижней части файла.Не рекурсивный метод для того же:
источник
Мне нравится это коротко и без большого взлома. Вы можете запускать этот oneliner из ex (с vim) при необходимости (или помещать каждую команду в vimrc, когда открываются log-файлы).
(если вы хотите перейти (почти) к концу файла, просто используйте «G» вместо «lh» с кнопками)
Объяснение:
autoread
: читает файл при изменении извне (но он не работает сам по себе, нет внутреннего таймера или чего-то в этом роде. Он будет читать файл только тогда, когда vim выполняет действие, как команда в ex:!
CursorHold * checktime
: когда курсор не перемещается пользователем в течение времени, указанного вupdatetime
(который по умолчанию составляет 4000 миллисекунд)checktime
, выполняется проверка изменений вне файлаcall feedkeys("lh")
: курсор перемещается один раз, вправо и назад влево. и тогда ничего не происходит (... что означает, чтоCursorHold
срабатывает, что означает, что у нас есть цикл )Чтобы остановить прокрутку при использовании
call feedkeys("G")
, выполните:set noautoread
- теперь vim скажет, что файл был изменен, и спросит, хотите ли вы прочитать изменения или нет)Мне нравится идея просматривать файлы журналов в vim (вместо tail -f), например, когда вы работаете в сеансе ssh без screen / tmux. Кроме того, вы можете при необходимости скопировать напрямую из файла журнала, или сохранить результаты напрямую или ... все, что вы можете сделать с помощью vim :)
* из этого ответа (ссылка на ответ от PhanHaiQuang и комментарий от flukus )
источник
Редактировать: я прошу прощения, полностью обошел стороной, что вы уже пробовали это.
Вы можете попробовать использовать плагин Tail Bundle , я думаю, он должен делать то, что вы ищете.
Для установки откройте tail-3.0.vba с помощью vim и выполните:
Перезапустите, и вы сможете подключить файл из vim следующим образом:
источник
ТОЛЬКО для VIM 8.0+ были введены таймеры, так что вы можете использовать таймер для имитации функции хвоста, это довольно эффективно работает по моему опыту.
Я назначил клавишу F6, чтобы включить хвост, и клавишу F7, чтобы отключить хвост, вы можете настроить их в командах ниже, также см. Мой раздел ниже для СЛОВ ПРЕДОСТЕРЕЖЕНИЯ.
Запустите следующее
Вы также можете сделать вышеуказанные команды частью vimrc, чтобы они всегда были у вас.
Несколько слов предостережения:
источник
В Vim выполните:
Это приостановит Vim, в то время как разветвленный дочерний элемент выполняется
tail -f
в текущем буфере. Нажатие Ctrl-Cвозвращает вас обратно в буфер в Vim.источник
tail
делает работу. Vim портативный. Это не.