diff --git a/autoload/SpaceVim/api/vim/highlight.vim b/autoload/SpaceVim/api/vim/highlight.vim
index 0765bafd6..482676a83 100644
--- a/autoload/SpaceVim/api/vim/highlight.vim
+++ b/autoload/SpaceVim/api/vim/highlight.vim
@@ -70,10 +70,16 @@ function! s:self.hide_in_normal(name) abort
endif
if &termguicolors || has('gui_running')
let bg = self.group2dict('Normal').guibg
+ if empty(bg)
+ return
+ endif
let group.guifg = bg
let group.guibg = bg
else
let bg = self.group2dict('Normal').ctermbg
+ if empty(bg)
+ return
+ endif
let group.ctermfg = bg
let group.ctermbg = bg
endif
diff --git a/autoload/SpaceVim/layers/lang/php.vim b/autoload/SpaceVim/layers/lang/php.vim
index 18b1c7182..977752dde 100644
--- a/autoload/SpaceVim/layers/lang/php.vim
+++ b/autoload/SpaceVim/layers/lang/php.vim
@@ -21,7 +21,7 @@ function! SpaceVim#layers#lang#php#plugins() abort
call add(plugins, ['StanAngeloff/php.vim', { 'on_ft' : 'php'}])
call add(plugins, ['2072/PHP-Indenting-for-VIm', { 'on_ft' : 'php'}])
call add(plugins, ['rafi/vim-phpspec', { 'on_ft' : 'php'}])
- call add(plugins, ['lvht/phpfold.vim', { 'on_ft' : 'php'}])
+ call add(plugins, ['lvht/phpfold.vim', { 'on_ft' : 'php', 'build' : 'composer install'}])
return plugins
endfunction
diff --git a/docs/README_zh_cn.md b/docs/README_zh_cn.md
index 1b713b41f..35bb4534b 100644
--- a/docs/README_zh_cn.md
+++ b/docs/README_zh_cn.md
@@ -168,3 +168,18 @@ let g:spacevim_guifont = 'DejaVu\ Sans\ Mono\ for\ Powerline\ 11'
`g:spacevim_guifont` | '' | 设置SpaceVim字体
`g:spacevim_sidebar_width` | 30 | 设置边栏宽度,文件树以及语法树
`g:spacevim_custom_plugins` | `[]` | 设置自定义插件
+
+
+### 延伸阅读
+
+#### Vim 8 新特新之旅
+
+
+ {% for post in site.categories.tutorials_cn %}
+ -
+ {{ post.title }}
+
+ {% endfor %}
+
+
+
diff --git a/docs/_posts/2017-02-11-vim8-new-feature-timers-zh_cn.md b/docs/_posts/2017-02-11-vim8-new-feature-timers-zh_cn.md
new file mode 100644
index 000000000..fbc7a79dd
--- /dev/null
+++ b/docs/_posts/2017-02-11-vim8-new-feature-timers-zh_cn.md
@@ -0,0 +1,58 @@
+---
+title: "VIM 8 新特性之旅: 定时器 (timers)"
+categories: tutorials_cn
+excerpt: "VIM 8 新特性之旅系列教程 - 定时器"
+---
+
+## 定时器( timer )
+> vim 需要支持 +timers 特性
+
+### 什么是定时器?
+
+Vim 的定时器是指在指定时间后重复指定次数执行某个回调函数。 这一功能需要 Vim 支持 `+timers` 特性。
+
+### 启动定时器
+
+`timer_start({毫秒}, {回调函数}[,{选项}])`
+
+Vim 中这个方法将创建一个计时器,并且返回这个定时器的 ID。 回调函数接受一个参数,可以是字符串,表示方法具体名称,也可以是 `Funcref` 变量。 下面是一个示例:
+
+```vim
+func MyHandler(id)
+ echo 'This is handler called for timer-' . a:id
+endfunc
+let timer = timer_start(500, 'MyHandler',
+ \ {'repeat': 3})
+```
+
+#### 获取定时器信息
+
+`timer_info([{ID}])`
+
+这个方法会返回一个存储定时器信息的列表, 当编号为 ID 的定时器不存在,将返回一个空的列表,当直接调用这个方法, 而不传递任何参数时,将返回所有定时器的信息。返回列表中每一个元素实际上是一个字典数据类型,具体的结构如下:
+
+
+ {
+ "id" : 该定时器的 ID,
+ "time" : 定时器启动是所设置的毫秒数,
+ "remaining" : 距定时器启动还剩余的毫秒数,
+ "repeat" : 定时器还需要重复执行的次数,无限执行则返回 -1,
+ "callback" : 回调函数,
+ "paused" : 是否被暂停,是则返回 1,否则返回 0
+ }
+
+#### 暂停定时器
+
+`timer_pause({ID} , {是否})`
+
+这个方法接受 2 个参数,第一个参数是 定时器的 ID, 第二个参数是决定是 暂停 还是 取消暂停 的关键,当第二个参数是一个非 0 数值,或非空字符串,则该定时器被暂停,否则即为取消暂停。
+
+#### 停止定时器
+
+`timer_stop([{ID}])`
+
+停止一个编号为 ID 的定时器,ID 即为 timer_start() 方法的返回值,因此必须为数值,即便编号为 ID 的定时器不存在,这个方法也不会报错。
+
+另外一个方法 timer_stopall(), 将停止所有定时器。就个人来看 vim 这个方法设计并不完美, 一个软件的方法命名应该存在一定的规则,比如前面的 timer_info() 就是一个可变参数的方法,当无参执行是返回所有定时器的信息,那么这个 timer_staop() 应该也是可以参数方法,无参执行时取消所有定时器。当然了这个仅仅是个人意见。
+
+查阅跟多 Vim 中文教程,请阅读: