Hexo Introduction

Table of content:


安装和使用

npm

查看 官方文档 安装好 npm

hexo-cli

1
2
3
4
5
npm install hexo-cli
hexo init blog
cd blog
npm install
hexo init

基本使用

1
2
3
4
5
hexo server # 预览
hexo clean
hexo generate # 生成静态文件
hexo deploy # 部署
hexo new post 'post name' # 创建新的文章

更换主题,可以在 theme list 里面选择一个喜欢的主题,并在 _config.xml 里面指定。这个博客目前使用的是 https://github.com/Mrminfive/hexo-theme-skapp, 然后根据自己的喜好 fork 了之后进行了一些修改。

推荐的配置

使用 GitHub Page

在 GitHub 创建一个名为 {your_github_id}.github.io 的仓库 (Page 是默认打开的,不过你也可以检查下仓库的 GitHub Page 的设置是否开启)

在 Hexo 的 _config.xml 加上以下配置

1
2
3
4
5
# Deployment
deploy:
type: git
repo: git@github.com:your_id/your_id.github.io.git
branch: master

参考文档:

使用 hexo-toc, Table of content

文章,尤其是长的文章,都比较建议有大纲或者说 Table of centent, 一方面写的时候会更有逻辑和侧重,另一方面,看的人也能更加清晰。

安装:

1
npm install hexo-toc --save

配置:

1
2
3
4
5
6
7
8
9
toc:
maxdepth: 3
class: toc
slugify: transliteration
decodeEntities: false
anchor:
position: after
symbol: '#'
style: header-anchor

在 post 中的引用方式:

1
<!-- toc -->

Music Player 插件

安装:

1
npm install --save hexo-tag-aplayer

在 post 中的引用

1
{% aplayer title author url [picture_url, narrow, autoplay, width:xxx, lrc:xxx] %}

参数说明:

  • title : 曲目标题
  • author: 曲目作者
  • url: 音乐文件 URL 地址
  • picture_url: (可选) 音乐对应的图片地址
  • narrow: (可选)播放器袖珍风格
  • autoplay: (可选) 自动播放,移动端浏览器暂时不支持此功能
  • width:xxx: (可选) 播放器宽度 (默认: 100%)
  • lrc:xxx: (可选)歌词文件 URL 地址

后文有各种模仿类型和示例可以参考。

Embed Instagram 插件

安装:

1
npm install hexo-tag-instagram —save

引用

1
{% instagram  instagram_url %}

Embed Twitter 插件

安装:

1
npm install hexo-tag-twitter —save

引用

1
{% twitter twitter_url %}

Markup 的使用和示范

有时候会想要在博客里面引用一个链接,别人说的话,或者一些媒体,如 Instagram, Twitter, Youtube 等。Hexo 本身支持了很多 Markup 来实现一些媒体引用的展示, 详见 Hexo 文档。同时这个生态也不错,所以基本上你想要的功能,都已经有插件实现了,在插件列表 里面找到想要的插件并跟着文档安装就可以直接使用了。 以下是一些 demo 和对应的 Markup。

Music

本地

1
{% aplayer "Caffeine" "Jeff Williams" "caffeine.mp3" "picture.jpg" "lrc:caffeine.txt" %}

单曲:

1
{% meting "1868553" "netease" "song" "autoplay" "mutex:false" "listmaxheight:340px" "preload:none" "theme:#ad7a86"%}

播放列表:

1
{% meting "60198" "netease" "playlist" "autoplay" "mutex:false" "listmaxheight:340px" "preload:none" "theme:#ad7a86"%}

instagram:

1
{% instagram  https://www.instagram.com/p/BXkz1bYB1-N/ %}

1
{% instagram  https://www.instagram.com/p/BkmbKlxl1RY/?taken-by=amylewis777 %}

twitter

1
{% twitter https://twitter.com/amylewis7772/status/1011953935303655424 %}

Youtube

1
{% youtube rB9rPdMRxIA %}

引用

简单引用

Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.

1
2
3
{% blockquote %}
Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
{% endblockquote %}

应用一篇文章

Every interaction is both precious and an opportunity to delight.

1
2
3
{% blockquote Seth Godin http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html Welcome to Island Marketing %}
Every interaction is both precious and an opportunity to delight.
{% endblockquote %}

引用一个人说的话

Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.

David LevithanWide Awake
1
2
3
{% blockquote David Levithan, Wide Awake %}
Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
{% endblockquote %}

代码

1
2
3
4
5
6
7
8
9
10
11
12
def do(self, job_func, *args, **kwargs):
self.job_func = functools.partial(job_func, *args, **kwargs)
try:
functools.update_wrapper(self.job_func, job_func)
except AttributeError:
# job_funcs already wrapped by functools.partial won't have
# __name__, __module__ or __doc__ and the update_wrapper()
# call will fail.
pass
self._schedule_next_run()
self.scheduler.jobs.append(self)
return self
1
2
3
4
{% codeblock lang:python %}
def do(self, job_func, *args, **kwargs):
print('hello world')
{% endcodeblock %}

关于头图

拍摄自费城动物园

Python 包管理编年史
傅雷家书,先做人,再做艺术家