2019-02-08 01:15:19更新:
发现vim自动添加修改时间代码有几个打错字的地方,更正了一下。
玩hexo博客也有段时间了,自己写一个原创实现hexo文章按更新时间排序的方法。为什么要写这个呢?因为确实网上找不到!!我找了好久,要么就是不能实现,要么就是不够方便。还需要通过手动添加时间或索引值来进行排序。
我这个方法是全自动,完全不用手工参与,修改完保存。就会自动将最新修改的文章,排到前面。废话不多说,开始搞!
前言
Hexo 首页的文章列表默认是通过文章建立的日期来排序的,也就是最新的文章排在最前面。
但是,有时候我的文章会持续更新,我希望将我更新后的文章放到最前面。但是只要md文件一建立,date:
标签上的值就不会再变更了。
网上有人说hexo有提供updated:
这个参数,只需要将主站配置文件_config.yml
的order_by: -date
修改成order_by: -updated
就可以了,实际上是不完全对的。1
2
3
4index_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
<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
3title: {{ title }}
date: {{ date }}
updated: {{ date }}
接着打开~/.vimrc
的vim配置文件。将下面的代码添加到最后,保存退出。1
2
3
4
5
6
7
8
9
10autocmd 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/updated: /s/updated: .*/updated:".
\strftime(" %F %H:%M:%S" ) . "/e"
endfunc
当我们新建md文章时,会自动添加创建时间。而当我们用vim编辑器修改md文章之后,vim保存退出后会自动将updated:
的值,修改成当前时间。这样就完美实现了文章自动排序。快去试试吧!!
当然小伙伴们也可以把快捷键修改的内容也添加进去。这二者是没有冲突的,可以一起使用。