利用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 }}
updated: {{ 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/updated: /s/updated: .*/updated:".
\strftime(" %F %H:%M:%S" ) . "/e"
endfunc

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

本文标题:利用vim实现HEXO文章按更新时间自动排序

文章作者:Hank ZHU

发布时间:2018年11月25日 - 12:54

最后更新:2019年02月08日 - 01:22

原始链接:http://zealot.top/利用vim实现HEXO文章按更新时间排序.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际

如需转载请注明文章出处,并保留原文链接及作者。感谢您尊重别人的劳动成果!


-------------本文结束 感谢您的阅读-------------
-------------如果觉得这篇文章不错,可以请作者喝杯咖啡!-------------