让Vim函数根据时间调用自己

时间:2013-11-27 13:57:12

标签: vim

我在这里做错了什么?当我进入vim时没有任何反应。

enter image description here

这是我的代码!

colorscheme default
let g:Favcolorschemes = ["darkblue", "morning", "shine", "evening"] 
function SetTimeOfDayColors()
  " currentHour will be 0, 1, 2, or 3
  let g:CurrentHour = (strftime("%H") + 0) / 6
  if  g:colors_name !~ g:Favcolorschemes[g:CurrentHour]
    execute "colorscheme " . g:Favcolorschemes[g:CurrentHour]
    echo "execute " "colorscheme " . g:Favcolorschemes[g:CurrentHour]
    redraw
  endif
endfunction
set statusline=%<%t%h%m%r\ \ %a\ %{strftime(\"%c\")}%=0x%B\
    \\ line:%1,\ \ col:%c%V\ %P
set statusline+= \ %{SetTimeOfDayColors()}

1 个答案:

答案 0 :(得分:1)

通过SetTimeOfDayColors(),您可以有效地从:colorscheme表达式执行'statusline'命令。看起来这是不可能/有效的。但是,对我来说,这个最小的例子确实可行(Windows上的GVIM 7.3.823):

fun! Foo()
    colorscheme blue
endfun
set stl=%{Foo()}

(抱歉,我不想花时间从你的屏幕截图中输入你的代码。)

可能的解决方法

SetTimeOfDayColors()中,只更新包含colorscheme名称的(全局)变量,让频繁运行的:autocmd(例如CursorHold)执行实际的:colorscheme变化