Answers:
你不能vim
表现得像tail -f
。你可以less
表现得象的组合vim
和tail -f
虽然。
永远转发(跟随)模式
less
您可以通过按F或将+F
其作为自变量传递进入永久永远前进模式。
$ less +F
在这种模式下,less
其行为类似于tail -f
到达文件末尾时不会停止读取。它会不断使用文件中的新数据进行刷新。要退出此模式,请按Ctrlc。
语法高亮
less
支持对其读取的数据进行自动过滤。有一个名为source-highlight的程序,可以执行基本的源代码突出显示。它带有一个脚本,该脚本可以与配合使用less
。要使用它,只需LESSOPEN
适当设置环境变量即可。
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
您还必须通过less
向其传递-R
标志来告诉传递原始终端转义序列(这些告诉您的终端如何为文本着色)。您可以通过设置环境变量less
来假装它总是被传递-R
标志LESS
。
export LESS=' -R '
什么时候less
还不够
尽管less
具有类似vi的键绑定,但它与Vim不同。有时,它感觉很陌生,并且缺少重要的功能,例如ctags集成和编辑文本的功能。
您可以通过按在当前正在查看的文件上less
调用Vim(假定EDITOR=vim
)v。less
甚至可以将光标置于Vim中的正确位置。退出Vim时,您将回到less
。如果您在使用Vim时对文件进行了任何更改,它们将反映在中less
。
vim --servername TAIL_VIM /tmp/somefile
现在,在另一个shell(如bash)中,您可以执行以下操作:
while true
do
inotifywait --event modify /tmp/somefile \
&& vim --servername TAIL_VIM --remote-send '<C-\><C-N>:edit!<CR>G';
done
在<C-> <CN>强制vim进入正常模式的地方,“编辑!” 告诉vim重新加载当前文件(CR模拟按Enter键),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"
由于Evan Teitelman的评论,我找到了答案。我的解决方案受到/usr/share/vim/vimcurrent/macros/less.vim的启发。
我做了自己的功能,但可以改进很多。
function! Tailf()
e
normal G
redraw
sleep 1
call Tailf()
endfunction
然后按CTRL + C退出Tailf。
要以Tailf模式打开日志文件: view -M "+call Tailf()" /path/to/logfile.log
我不喜欢的是sleep
调用,它不允许在自动刷新期间在vim中执行任何操作。最好的办法是,即使我在另一个拆分窗口中,缓冲区也是自治的并可以更新。无论如何,这是一个好的开始。:)
我喜欢它简短,没有太多的黑客攻击。您可以在需要时从ex(whitin vim)运行此oneliner(或在打开日志文件时将每个命令放在vimrc中。)
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(如果您想(几乎)跳到文件末尾,只需在Feed键中使用“ G”而不是“ lh”)
说明:
autoread
:从外部更改时读取文件(但是它不能单独工作,没有内部计时器或类似的东西。它只会在vim进行操作(例如ex中的命令)时读取文件 :!
CursorHold * checktime
:当在指定的时间updatetime
(默认为4000毫秒)内用户未移动光标时checktime
,将检查文件外部的更改call feedkeys("lh")
:光标向右和向左移动一次。然后什么也没发生(...这意味着CursorHold
被触发,这意味着我们有一个循环)要在使用时停止滚动call feedkeys("G")
,执行:set noautoread
-现在vim会告诉该文件已更改,并询问是否要读取更改)
我喜欢在vim中监视日志文件(而不是tail -f)的想法,例如,当您在没有Screen / tmux的ssh会话中工作时。另外,如果需要,您可以直接从日志文件中复制,也可以直接保存输出,或者...使用vim可以做什么:)
*从这个答案(指的由一个答案PhanHaiQuang和评论flukus)
编辑:我很抱歉,完全绕开了您已经尝试过的方法。
您可以尝试使用Tail Bundle插件,我认为它应该可以满足您的需求。
要安装,请用vim打开tail-3.0.vba并执行:
:so %
重新启动,您应该可以像这样从vim中拖尾文件:
:Tail /path/to/file
仅对于VIM 8.0+,他们引入了计时器,因此您可以使用计时器来模拟尾音功能,根据我的经验,这非常有效。
我已经映射了F6键来打开尾部,而F7键来关闭尾部,您可以在下面的命令中自定义它们,也请参见下面的“小心语”部分。
运行以下命令
exe ":function! Tail(timer) \n :exe 'normal :e!\<ENTER>G' \n endfunction"
map <F6> :exe timer_start(2000, 'Tail', {'repeat':-1})<CR>
map <F7> :exe timer_stopall()<CR>
您也可以使上述命令成为vimrc的一部分,以便始终使用它们。
注意事项:
vim
?这有什么错tail -f
?