[原创] 利用 vim 实现 HEXO 文章按更新时间自动排序

2019-02-08 01:15:19 更新:
发现 vim 自动添加修改时间代码有几个打错字的地方,更正了一下。


玩 hexo 博客也有段时间了,自己写一个原创实现 hexo 文章按更新时间排序的方法。为什么要写这个呢?因为确实网上找不到!!我找了好久,要么就是不能实现,要么就是不够方便。还需要通过手动添加时间或索引值来进行排序。
我这个方法是全自动,完全不用手工参与,修改完保存。就会自动将最新修改的文章,排到前面。废话不多说,开始搞!

前言

Hexo 首页的文章列表默认是通过文章建立的日期来排序的,也就是最新的文章排在最前面。

但是,有时候我的文章会持续更新,我希望将我更新后的文章放到最前面。但是只要 md 文件一建立,date: 标签上的值就不会再变更了。

网上有人说 hexo 有提供 updated: 这个参数,只需要将主站配置文件_config.ymlorder_by: -date 修改成 order_by: -updated 就可以了,实际上是不完全对的。

1
2
3
4
index_generator:
path: ''
per_page: 10
order_by: -updated

正文

HEXO 排序确实是有 updated: 这个参数,但是问题的关键不在于这个参数,而是只要你建立了 MD 博客文件,date:updated: 这二个参数都不会按你的修改时间自动更新的。
所以按更新时间排序,只需将 date:updated: 的时间,改成你修改完成后的时间。然后在_config.yml 主站文件中,使用 order_by: -date 还是 order_by: -updated 这二种参数中的任意一个都是有效的。

思路

1、手动修改 date:updated: 的时间。
2、通过快捷键实现自动插入当前时间。
3、自动在保存时,将 date:updated: 的时间改成当前时间。

手动修改

这个我就不说了,直接在博文中把时间改成当前时间就好了。

快捷键修改

我使用的是 vim, 所以讲一下 vim 实现快捷键插入时间的方法。其它编辑器的可以自己查看相关文档。
打开 ~/.vimrc 的 vim 配置文件。将下面的代码添加到最后,保存退出。

1
2
:nnoremap <F6> "=strftime("%F %H:%M:%S")<CR>gP
:inoremap <F6> <C-R>=strftime("%F %H:%M:%S")<CR>

再用 vim 打开你的文章或者任意文件,按就可以插入当前时间了。

终级大招:保存后自动修改

vim 的强大之处,是他支持很多相关事件。我们这次用到的是 autocmd
先将_config.yml 主站配置文件中的 order_boy: 修改成 order_by: -updated, 按 updated 这个参数来排序。
编辑 ~/scaffolds/post.md 模版文件,在文件头加入下面的内容,后保存退出。

1
2
3
title: {{ title  }}
date: {{ date }}

接着打开 ~/.vimrc 的 vim 配置文件。将下面的代码添加到最后,保存退出。

1
2
3
4
5
6
7
8
9
10
autocmd BufWrite,BufWritePre,FileWritePre *.md ks|call LastModified()|'s
func LastModified()
if line("$") > 20
let l = 20
else
let l = line("$")
endif
exe "1,".l."g/
\strftime(" %F %H:%M:%S" ) . "/e"
endfunc

当我们新建 md 文章时,会自动添加创建时间。而当我们用 vim 编辑器修改 md 文章之后,vim 保存退出后会自动将 updated: 的值,修改成当前时间。这样就完美实现了文章自动排序。快去试试吧!!
当然小伙伴们也可以把快捷键修改的内容也添加进去。这二者是没有冲突的,可以一起使用。