

用 ox-hugo 写博客
source link: https://hsingko.github.io/post/2021/04/21/how-to-use-ox-hugo/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

写在前面#
ox-hugo 的功能是打通 org-mode -> hugo 的发布渠道,并且提供一个基于 org-mode 的博文管理方式,因此本文的目标读者是日常使用 emacs 写作的人群。
对于正在使用 org-mode 写 hugo 博客但还不了解 ox-hugo 的读者,这里简要介绍一下 ox-hugo 具体解决了什么痛点:
- 你并不需要修改你的博客,ox-hugo 完全兼容原有模式
- ox-hugo 会将 org 文档自动转换成 markdown 格式。这样的好处是可以正常显示表格了(hugo 目前并不支持 org 表格)。
- ox-hugo 能自动将 org 文档中的图片保存到 hugo 的相应路径,你可以不用在手动移动图片文件了。比如我想要在博文中插入截屏图片就只需要执行
M-x org-screenshot-take
就可以了, ox-hugo 会帮我完成剩下的事情 - 你可以像管理 org-mode tree 一样管理博客。比如用 TODO 关键字表示草稿、DONE 表示正式发布,它还会自动更新博客的创建时间和修改时间,非常方便
用一张图看看使用 ox-hugo 之后的写作方式:
从截图中你可以了解到 ox-hugo 的写作特点:
- 你可以将所有博文放在一个 org 文件中。在右侧的编辑器中,你可以看到除了本篇博客之外,还有其他几篇用
TODO
关键词标识的博客,它们目前都是草稿,而只要切换到DONE
它们就会正式发布 - ox-hugo 使用
properties
来指定 hugo 配置,比如博客发布的路径、标题以及文章摘要等等 - ox-hugo 会转换 org-mode
TAG
和 emacs 生态完美结合 - ox-hugo 提供了一个名为
org-hugo-auto-export-mode
,当你修改文章之后会自动发布到 hugo 中
如何使用 ox-hugo#
安装#
官方文档上有如何安装的说明,如果和我一样用的是 doom emacs
, 那么安装也很简单,首先在 package.el
文件中添加:
(package! ox-hugo)
然后在 config.el
文件中启用即可:
(use-package! ox-hugo
:ensure t
:after ox)
快速上手#
在将 org 文件导入到 hugo 目录前,还需要配置 Hugo 博客的目录,在 org 文件头中添加如下配置:
#+HUGO_BASE_DIR: ~/Blog/
#+hugo_front_matter_format: yaml
#+hugo_auto_set_lastmod: t
#+HUGO_SECTION: post
指明目录之后执行 M-x org-hugo-export-to-md
, 然后就会在 ~/Blog/content/posts/
目录下生成一个 markdown 文件。
这里简要介绍一下这些配置的意义:
HUGO_BASE_DIR
指定了 hugo 博客文件夹的位置hugo_front_matter_format
指定了 front matter 的格式hugo_auto_set_lastmode
会让 ox-hugo 自动更新博客的修改时间HUGO_SECTION
指定了这篇博客会发布到的目录,比如 post 或者 posts
ox-hugo 提供了两种博客发布方式:基于文件,基于 subtree 。 前者将整个 org 文件转换成一个 markdown 文件,而后者可以从一个 org 文件中提取出多个文章。和官方一样我推荐用 subtree 的方式,因为后者功能更为强大,为了简明起见,这里我只介绍后一种。
可能有人会嫌我啰嗦,更愿意从例子中学习,这里我就把这篇博客的原始文件贴上来:
+TITLE: Blog
#+HUGO_BASE_DIR: ~/Blog/
#+hugo_front_matter_format: yaml
#+hugo_auto_set_lastmod: t
#+HUGO_SECTION: post
* TODO 用 ox-hugo 写博客 :emacs:hugo:
:PROPERTIES:
:EXPORT_FILE_NAME: index
:EXPORT_DESCRIPTION: Whole hugo blog in plain text!
:EXPORT_HUGO_BUNDLE: 2021/04/21/how-to-use-ox-hugo
:END:
** 写在前面
.....
[[file:./images/screenshot-27.png]]
....
** 如何使用 ox-hugo
*** 安装
...
*** 快速上手
...
使用 M-x org-hugo-export-to-md
之后会在 <HUGO_BASE_DIR>/content/<HUGO_SECTION>/<EXPORT_HUGO_BUNDLE>
目录下创建 <EXPORT_FILE_NAME>.md
文件。
如果参考我的例子,你应该就已经学会如何使用 ox-hugo 写博客了。但如果你并不熟悉 hugo bundle, 或者好奇 ox-hugo 会如何处理你的图片,那么请接着看以下的补充说明。
关于 hugo bundle#
hugo 官方的文档写得并不是很清晰,反正我看了一头雾水,但经过这么多天的使用,我有了自己的看法,先别问它是什么:
-
它能做什么? 如果你不使用 bundle 那么我相信你会把所有文章放到 post 目录下面,这样时间久了,这个目录下面就会有大量的 md 文件,不便管理。
-
而 bundle 提供了层级目录的功能,你可以像我一样将文章按照年月日的划分放到子文件夹里。
-
不仅如此,你还可以将所有文章相关的资源放到同一个目录下面。比如在以前,文章的图片必须放到
/static/images/
目录下面,而使用了 bundle 之后,它们就可以放到文章所在的目录下面。
-
-
如何使用?
-
还是以我自身情况作为例子,我会先将一篇博客按照年月日划分,然后再加上标题;比如这篇文章是:
/2021/04/21/how-to-use-ox-hugo/
-
有了目录之后,再在这个目录下面放置一个
index.md
文件,里面就是博客的正文
-
希望我上面的说明能够增进你对 hugo bundle 的理解,如果你还是搞不明白它是怎么作用的,可以先按照我的样子进行实验,经过实践想必你会有更好的认识。
关于图片处理#
如果不使用 bundle ,那么 hugo 会将图片放到 static/images/
目录下面,反之,它会将图片放到文章所在的目录下面。
比如,我这篇文章的截图的原始文件路径是 ./images/screenshot-27.png
, ox-hugo 进行转换之后会把它放到 post/2021/04/21/how-to-use-ox-hugo/images/screenshot-27.png
中。
自动发布#
每次保存然后手动执行 M-x org-hugo-export-to-md
发布实在太麻烦了,你可以启动 org-hugo-auto-export-mode
来实现自动发布。
目前的体验#
一个月前创建了这篇文章,然而直到今天才完成,懒癌发作真是要命啊;不过经过这一个多月的使用体验,我推荐 ox-hugo 也更有底气了,因为它确实方便了博客写作(你甚至可以用 org-agenda 来规划博客写作,设置 Deadline ,任何一个 emacser 都无法抗拒这种诱惑吧 hh)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK