记录本博客的撰写过程,便于日后按图索骥。
0 同步远程仓库(多端)
在当前电脑的kaluojushi.github.io
文件夹(已git init
和remote
)下的hexo
分支,打开git bash
,依次执行:
1 | $ git fetch --all |
以同步远程仓库代码。
这个操作也可以通过IDE或GitHub Desktop进行,而且更推荐!
1 清除缓存
根目录下执行:
1 | $ hexo clean |
清除/public
、/db.json
等缓存。可做可不做,但当页面改动较大时,或拉了代码时,建议做一下。
2 新建md文档
下述hexo new
均可缩写为hexo n
。
2.1 新建文章
根目录下执行:
1 | $ hexo new [post] "postName" |
根目录会在/source/_posts
下新建文件postName.md
,通常采用英文命名postName
。
2.2 新建页面
根目录下执行:
1 | $ hexo new page "pageName" |
根目录会在/source/pageName
下新建文件index.md
。
若要生成二级页面,则根目录下执行:
1 | $ hexo new page --path about/me "pageTitle" #--path可缩写为-p |
根目录会在/source/about
下新建文件me.md
,并将title
命名为pageTitle
,注意title
必须指定。
2.3 新建草稿
根目录下执行:
1 | $ hexo new draft "draftName" |
根目录会在/source/_drafts
下新建文件draftName.md
。
发表草稿时,用publish
命令:
1 | $ hexo publish [post/page] <fileName> |
新建草稿一般不用,因为可以先写好Markdown然后再new post
就好。
3 编辑Front-matter
Front-matter是文件最上方以---
分隔的区域,一般来说完整应如下:
1 | --- |
3.1 标题
hexo会把Markdown文档转化为html静态网页,因此要想实现文章标题与域名不同,可以通过以下方法
- 文件名为
英文标题.md
的形式。根据谷歌文档,建议使用-
分隔单词,而不是_
或驼峰式。 - Front-matter的
title
为实际的中文标题。
这样文章域名就为英文.html
,而标题为中文。
3.2 日期
date
:建立日期,自动生成,默认为Markdown文档建立日期。updated
:更新日期,不自动生成,但NexT主题会自动读取文档修改日期;可以自行添加或修改。
3.3 分类
单分类很简单,直接跟后面就行:
1 | categories: Diary |
表示分类为Diary。
子分类用逗号表示,例如:
1 | categories: [Diary, Life] |
表示分类为Diary的子分类Life。别忘了方括号,否则会被理解为一个分类,名为“Diary, Life”。
并列分类则使用列表形式,例如:
1 | categories: |
表示分类分别为“Diary”、“Life”和“Music的子分类Piano”这三个分类。
好麻烦,所以应当提前有一个大体的分类思路。
3.4 标签
单标签也是直接输入就行。
多标签有以下两种表示方法:
1 | tags: [C, Java, python] |
或
1 | tags: |
注意:设置分类、标签列表
打开根目录的_config.yml
,对下面代码进行更改:
1 | # Category & Tag |
则可以更改对应分类、标签的访问路径。
3.5 页面类型(NexT主题)
对于page,可以设置type
为有关类型:
type: categories
:分类页面。type: tags
:标签页面。type: links
:友链页面,为自己添加,参考此文。
3.6 评论
将comments
设置为true
即可,默认即为true
,所以可以不加这一条。如果要关闭评论,则设置false
即可。
page的comments
也是默认开启的,包括categories页面和tags页面!!!
1 | comments: true |
3.7 layout
对于post,layout
默认为post
,因此一般不加。
对于page,建议是在new完后,在index.md
的Front-matter加上(好像不加也行):
1 | layout: page |
以下设置不适用NexT主题,因此划掉。
如果设置为layout: tagcloud
则为标签云页面。
如果设置为layout: timeline
则为时间线页面,具体在theme
的_config.yml
设置。
如果设置为layout: single-column
则为单栏页面。
3.8 数学公式
将mathjax
设置为true
即可。
1 | mathjax: true |
4 正文书写
使用Markdown正常书写即可,参见《Markdown基本语法与示例》。
注意文中不要出现两个大括号,或大括号与井号相连等与渲染语法冲突的情况。
1 | }} # Bad |
4.1 摘要
文章摘要有三种提取方法,优先级从高到低:
提取Front-matter的
description
内容。文字不多时用这种。在文章合适部分加上
<!--more-->
,文章会被自动截断。一般情况下或文字较多时用这种。根据主题配置文件中的如下代码自动生成摘要。不要用这种,观感会很差。
1
2
3auto_excerpt:
enable: true
length: 150
4.2 标签插件
标签插件用于在正文中以{}
加%
的格式,输入特定内容。
4.2.1 引用块
语法如下:
1 | {% blockquote [author[, source]] [link] [source_link_title] %} |
普通引用块
1 | {% blockquote %} |
闻在宥天下,不闻治天下也。
引用加作者、来源
1 | {% blockquote 庄子, 《庄子·外篇·在宥》 %} |
闻在宥天下,不闻治天下也。
引用自网址
1 | {% blockquote @央视新闻 https://weibo.com/2656274875/Kt4FMdzB5?from=page_1002062656274875_profile&wvr=6&mod=weibotime&type=comment#_rnd1628758139404 新浪微博 %} |
8月11日0-24时,湖北省新增新冠肺炎确诊病例10例。
NexT还支持居中引用
1 | {% centerquote %} |
Tomorrow will be fine.
4.2.2 代码块
语法如下:
1 | {% codeblock [title] [lang:language] [url] [link text] [additional options] %} |
普通代码块
1 | {% codeblock %} |
1 | alert('Hello World!'); |
指定语言
1 | {% codeblock lang:javascript %} |
1 | alert('Hello World!'); |
代码标题、网址
1 | {% codeblock time.js http://jsrun.net/new 在线运行 %} |
1 | var time = new Date(); |
4.2.3 图片
语法如下:
1 | {% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %} |
固定大小的图片
1 | {% img https://cdn.jsdelivr.net/gh/kaluojushi/Corecabin-Picbed/img/kongjianzhan.jpg 200 100 '"中国空间站" "天和核心舱"' %} |
4.2.4 iFrame
语法如下:
1 | {% iframe url [width] [height] %} |
嵌入网易云音乐播放器
1 | {% iframe //music.163.com/outchain/player?type=2&id=1425676569&auto=0&height=66 330 86 %} |
其实直接放HTML的<iframe>
代码也可以:
1 | <iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=1425676569&auto=0&height=66"></iframe> |
嵌入bilibili视频播放器
1 | {% iframe //player.bilibili.com/player.html?aid=92523122&bvid=BV1eE411H7XL&cid=157973222&page=1 %} |
4.2.5 引用文章
引用其他文章的链接,语法为:
1 | {% post_path filename %} |
链接使用文章标题
1 | {% post_link build-corecabin-in-one-week %} |
链接使用自定义文字
1 | {% post_link build-corecabin-in-one-week '点击进入文章'%} |
标题特殊字符转义、禁止转义(false)
1 | {% post_link hexo-4-released 'How to use <b> tag in title' %} |
示例略
4.2.6 Bootstrap Callout(NexT主题)
语法如下:
1 | {% note class_name %} Content (md partial supported) {% endnote %} |
class_name
可以设置为default
、primary
、success
、info
、warning
或danger
。
1 | {% note defalut %} **defalut** {% endnote %} |
defalut
primary
success
info
warning
danger
5 发布
根目录下依次执行hexo三连:
1 | $ hexo generate #生成静态html到public |
也可以缩写成
1 | $ hexo g |
大功告成!
6 备份代码(多端)
根目录下依次执行:
1 | $ git add . |
以更新远程仓库代码。
这个操作也可以通过IDE或GitHub Desktop进行,而且更推荐!
7 多端管理说明
考虑到适用GitHub托管hexo源码存在或多或少的问题,尤其是git pull
和git push
与GitHub连接的加载速度太慢(因为办公室非Chrome时科学上网比较困难),所以可以使用如下方法:
当临时出差时:用Markdown写作,回来再new post
。当长期不在时:将整个hexo
用U盘或其他方式拷贝到笔记本上(反正也才几十Mb),然后在笔记本已安装hexo、设置好GitHub SSH密钥的情况下,执行npm install
即可。此时可以通过hexo s
查看是否成功。移动端时:用Simplenote写Markdown,回来再new post
。好像也有其他方法,但暂时不用。
目前核心舱的资源和代码已经分别进行远程管理,资源通过坚果云同步,代码通过GitHub同步,这是目前在多台电脑管理hexo比较合适的方式。
因此多端管理hexo时,仅需同步GitHub仓库的hexo分支即可,资源通过坚果云自动同步,静态页面通过hexo d
部署。移动端通过坚果云或语雀临时存储文稿就行。