hexo常用命令
本文大部分内容来自于Hexo的官方网站,自己摘录下来一些经常使用的Hexo指令。
写作:
hexo new [layout] <title>
命令中指定文章的布局(layout),默认为 post
,可以通过修改 _config.yml
中的 default_layout
参数来指定默认布局
布局(layout)
Hexo 有三种默认布局:post
、page
和 draft
。在创建这三种不同类型的文件时,它们将会被保存到不同的路径;而您自定义的其他布局和 post
相同,都将储存到 source/_posts
文件夹。
布局 | 路径 |
---|---|
post |
source/_posts |
page |
source |
draft |
source/_drafts |
所以一般我们开始写草稿的时候都是使用:
hexo new draft “新文章”
注意如果文章题目中包含空格,请用英文的“ ”将他们包括起来。生成的新文章.md
在blog文件夹的source/_drafts
里面,可以使用例如Typroa这样的md编辑软件来进行编写
草稿
刚刚提到了 Hexo 的一种特殊布局:draft
,这种布局在建立时会被保存到 source/_drafts
文件夹,您可通过 publish
命令将草稿移动到 source/_posts
文件夹,该命令的使用方式与 new
十分类似,您也可在命令中指定 layout
来指定布局。
hexo publish [layout] <title>
草稿默认不会显示在页面中,您可在执行时加上 --draft
参数,或是在 _config.yml
中把 render_drafts
参数设为 true
来预览草稿。
例如,上面的新文章草稿编写完成后,使用hexo publish draft “新文章”
来发布。
Front-matter
Front-matter 是文件最上方以 ---
分隔的区域,用于指定个别文件的变量,举例来说:
1 | --- |
以下是预先定义的参数,可在模板中使用这些参数值并加以利用。
参数 | 描述 | 默认值 |
---|---|---|
layout |
布局 | config.default_layout |
title |
标题 | 文章的文件名 |
date |
建立日期 | 文件建立日期 |
updated |
更新日期 | 文件更新日期 |
comments |
开启文章的评论功能 | true |
tags |
标签(不适用于分页) | |
categories |
分类(不适用于分页) | |
permalink |
覆盖文章的永久链接,永久链接应该以 / 或 .html 结尾 |
null |
excerpt |
纯文本的页面摘要。使用 该插件 来格式化文本 | |
disableNunjucks |
启用时禁用 Nunjucks 标签 {{ }} /{% %} 和 标签插件 的渲染功能 |
false |
lang |
设置语言以覆盖 自动检测 | 继承自 _config.yml |
published |
文章是否发布 | 对于 _posts 下的文章为 true ,对于 _draft 下的文章为 false |
布局
根据 _config.yml
中 default_layout
的设置,默认布局是 post
。当文章中的布局被禁用(layout: false
),它将不会使用主题处理。然而,它仍然会被任何可用的渲染引擎渲染:如果一篇文章是用 Markdown 写的,并且安装了 Markdown 渲染引擎(比如默认的 hexo-renderer-marked),它将被渲染成HTML。
除非通过 disableNunjucks
设置或 渲染引擎 禁用,否则无论布局如何,标签插件 总是被处理。
分类和标签
只有文章支持分类和标签,您可以在 Front-matter 中设置。在其他系统中,分类和标签听起来很接近,但是在 Hexo 中两者有着明显的差别:分类具有顺序性和层次性,也就是说 Foo, Bar
不等于 Bar, Foo
;而标签没有顺序和层次。
1 | categories: |
分类方法的分歧
如果您有过使用 WordPress 的经验,就很容易误解 Hexo 的分类方式。WordPress 支持对一篇文章设置多个分类,而且这些分类可以是同级的,也可以是父子分类。但是 Hexo 不支持指定多个同级分类。下面的指定方法:
1
2
3 categories:
- Diary
- Life会使分类
Life
成为Diary
的子分类,而不是并列分类。因此,有必要为您的文章选择尽可能准确的分类。如果你需要为文章添加多个分类,可以尝试以下 list 中的方法。
1
2
3
4 categories:
- [Diary, PlayStation]
- [Diary, Games]
- [Life]此时这篇文章同时包括三个分类:
PlayStation
和Games
分别都是父分类Diary
的子分类,同时Life
是一个没有子分类的分类。
标签插件(Tag Plugins)
引用块
在文章中插入引言,可包含作者、来源和标题。
别号: quote
1 | {% blockquote [author[, source]] [link] [source_link_title] %} |
代码块
在文章中插入代码。
别名: code
1 | {% codeblock [title] [lang:language] [url] [link text] [additional options] %} |
以 option:value
的格式指定额外选项,例如:line_number:false first_line:5
。
额外选项 | 描述 | 默认值 |
---|---|---|
line_number |
显示行号 | true |
line_threshold |
只有代码块的行数超过该阈值,才显示行数 | 0 |
highlight |
启用代码高亮 | true |
first_line |
指定第一个行号 | 1 |
mark |
突出显示特定的行,每个值用逗号分隔。 使用破折号指定数字范围 例如: mark:1,4-7,10 将标记第1、4至7和10行 |
|
wrap |
用 `` 包裹代码块 | true |
示例
普通的代码块
1 | {% codeblock %} |
指定语言
1 | {% codeblock lang:objc %} |
附加说明
1 | {% codeblock Array.map %} |
附加说明和网址
1 | {% codeblock _.compact http://underscorejs.org/#compact Underscore.js %} |
反引号代码块
另一种形式的代码块,不同的是它使用三个反引号来包裹。
``` [language] [title] [url] [link text] code snippet ```
一般情况下,还是建议使用反引号的代码块,因为是md文档的标准格式。
Image
在文章中插入指定大小的图片。
1 | {% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %} |
嵌入图片
hexo-renderer-marked 3.1.0+ 可以(可选)自动解析图片的文章路径,参考 本节 如何启用它。
“foo.jpg” 位于 http://example.com/2020/01/02/hello/foo.jpg
。
默认(无选项)
1 | {% asset_img foo.jpg %} |
自定义 class 属性
1 | {% asset_img post-image foo.jpg %} |
展示尺寸
1 | {% asset_img foo.jpg 500 400 %} |
title 和 alt 属性
1 | {% asset_img logo.svg "lorem ipsum'dolor'" %} |
文章摘要和截断
在文章中使用 <!-- more -->
,那么 <!-- more -->
之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。
例如:
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
首页中将只会出现
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
正文中则会出现
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
注意,摘要可能会被 Front Matter 中的 excerpt
覆盖。
个人感觉这种方式是相当不美观的,好好的文章中间要插入一段代码进去。
生成文件
使用 Hexo 生成静态文件快速而且简单。
1 | $ hexo generate |
监视文件变动
Hexo 能够监视文件变动并立即重新生成静态文件,在生成时会比对文件的 SHA1 checksum,只有变动的文件才会写入。
1 | $ hexo generate --watch |
完成后部署
可执行下列的其中一个命令,让 Hexo 在生成完毕后自动部署网站,两个命令的作用是相同的。
1 | $ hexo generate --deploy |
简写
上面两个命令可以简写为
$ hexo g -d
$ hexo d -g熟悉了后可以一个命令:
Hexo g && hexo d
服务器
hexo-server
一般写作都是在本地的(不会有人用vi在VPS端写吧?),所以很多时候都是本地搭个server,写完后预览一下效果再deploy到VPS上。
Hexo 3.0 把服务器独立成了个别模块,必须先安装 hexo-server 才能使用。
1 | $ npm install hexo-server --save |
安装完成后,输入以下命令以启动服务器,您的网站会在 http://localhost:4000
下启动。在服务器启动期间,Hexo 会监视文件变动并自动更新,无须重启服务器。
1 | $ hexo server |
如果想要更改端口,或是在执行时遇到了 EADDRINUSE
错误,可以在执行时使用 -p
选项指定其他端口,如下:
1 | $ hexo server -p 5000 |
静态模式
在静态模式下,服务器只处理 public
文件夹内的文件,而不会处理文件变动,在执行时,应该先自行执行 hexo generate
,此模式通常用于生产环境(production mode)下。
1 | $ hexo server -s |
自定义 IP
服务器默认运行在 0.0.0.0
,您可以覆盖默认的 IP 设置,如下:
1 | $ hexo server -i 192.168.1.1 |
指定这个参数后,就只能通过该IP才能访问站点。例如,对于一台使用无线网络的笔记本电脑,除了指向本机的127.0.0.1
外,通常还有一个192.168.*.*
的局域网IP,如果像上面那样使用-i
参数,就不能用127.0.0.1
来访问站点了。对于有公网IP的主机,如果指定一个局域网IP作为-i
参数的值,那么就无法通过公网来访问站点。
平时本地调试时候,我一般使用
hexo g && hexo server