使用 Obsidian 作为博客编辑器

2023-04-02

开始

此前我一直使用 VS Code 作为 Markdown 的编辑器,原因也很简单,我喜欢配合 VS Code 的内置 Terminal 来实现 Hugo 的预览和发布。

后来我接触到了 Obsidian,这才发现再多的 VS Code 插件也无法比拟 Obsidian 的编辑预览一体化,因为 Obsidian 能做到 Markdown 的所见即所得。

针对 Hugo 项目的文件结构,需要将 Obsidian 的文件与链接方式这样设置:

尽管 Obsidian 是个十分优秀的文本编辑器,有着很好的社区支持,但我并没有找到满意的 Hugo 相关插件,而在 Obsidian 外开一个终端又显得过于繁琐,所以我找到了几个插件,使 Obsidian 能够完美地配合 Hugo 进行预览和发布。

Shell commands

Shell commands 插件旨在使用平台终端命令扩充 Obsidian 的功能,类似于 VS Code 的 Code Runner 插件,使用这个插件就不需要另开一个 Terminal 窗口了。

由于国内网络的原因,在 Obsidian 插件商店中下载插件经常会缺失文件导致插件无法启用,所以更推荐你到 GitHub 上去手动下载 Shell commands 插件再安装。

打开 Shell commands 的设置面板

在第二栏 Environments 中把第一个工作目录改成 Hugo 项目的根路径,这样方便后面命令的运行。

回到设置的第一栏,点击 New shell command 就能新建脚本命令,下面是我常用的几个 Hugo 相关命令。

网站预览

在新建脚本窗口的命令行一栏中输入 Hugo server 的启动命令: hugo server -D

理论上现在我们就可以在 Obsidian 的命令行窗口中找到这个命令了,但给这条命令设置一个别名能更方便我们使用这个命令,点击这条命令上方的齿轮图标,在 alias 栏输入 server 作为别名。而下方的 Icon 项则可以为这条命令指定一个图标。

这样只要在 Obsidian 的命令行窗口中输入 server 就能找到这条命令了,运行这条命令后在浏览器中打开 http://localhost:1313/ 可以看到 Hugo 的服务已经在运行了。

事实上,你甚至可以直接用命令行打开浏览器一步到位,比如这样写:

hugo server -D && start msedge http://localhost:1313/

既然启动服务已经写好了,不如把关闭服务也加上去吧。

在任务管理器中可以看到 Hugo 在后台运行,我们要做的就是结束这个任务

新建一个命令,输入 taskkill /f /t /im hugo.exe,这样只要运行这条命令就能结束后台的 Hugo 的服务,同样你可以为它起一个别名 stop 方便操作。

当编辑完文档离开了 Obsidian,一般会希望 Obsidian 能够自动关闭 Hugo 服务,也就是说希望在离开 Obsidian 时能自动执行上面的 stop 命令。

stop 命令的设置窗口 Events 栏勾上 Obsidian quits 这一项,Obsidian 将会在离开时自动执行 stop 命令。

用户命令将在 Obsidian 退出时启动,但不能保证执行,因为 Obsidian 可能在 shell 命令执行之前就可能关闭。更有可能的是没有时间进行输出处理。

新建页面

虽然 Obsidian 也有自己的模板定义功能,但考虑到项目结构和所支持的程度有限,还是使用 Hugo 的原生命令更方便。

新建的页面标题应该在建立时由用户指定,所以在 Shell commands 设置页面的 Preaction 栏下新建一个 Prompts 作为提示用户输入标题的提示面板

给这个提示面板起名为 新建帖子,建立一个 Field 并照下面这样填写

注意这里的目标变量 {{_post_title}} 是用户变量,需要点击新建来创建,其名字可以任取但需要保持这个格式,即下划线开头并用双括号包裹。

建立好了变量之后,再回到设置主页建立一个命令 hugo new posts/{{_post_title}}

这里用 {{_post_title}} 这个用户变量替换了 Hugo 的新建命令中的页面名

最后点击齿轮图标,在 Preactions 栏中将提示面板 Prompt 选为刚刚建立的 新建帖子

这样,新建页面的命令就完成了,在 Obsidian 中运行它

输入标题后点击新建就能使用 Hugo 原生的新建页面了。

提交并发布

既然新建页面的功能都实现了,不如把项目提交到远程仓库的功能也顺便写一下吧。

参考上面的步骤,再新建一个变量面板 提交并发布

并新建一个命令

git add -A && git commit -m "{{_comment}}" && git push

运行一下试试

这样就能实现图形化的提交和发布操作了,结合下面的 Commander 插件甚至能一键运行这些命令。

更多关于 Shell commands 的设置可以查看其文档

Commander

Commander 插件的作用是绑定指定的命令行功能到特定的按钮上,如果 Shell commands 设置的命令别名仍达不到你的要求的话,试试将那些命令绑定到侧栏按钮上。

在 Commander 的设置页面将上面的命令添加到你喜欢的位置,比如左侧边栏上

你可以为各命令选择一个图标或起一个名字,保存之后 Obsidian 的侧边栏上将会出现这些按钮,只需要点击它,便能运行相对应的命令,这样,在 Obsidian 上处理 Hugo 项目的效率甚至高于 VS Code 了。

如果你需要隐藏侧边栏的某些按钮,请使用 Commander 内置的按钮隐藏功能,如果使用的是 Obsidian 自带的隐藏功能,可能会在按钮拖动排序时出现一些奇怪的 Bug。

其他插件

下面的几个插件能极大地改善 Obsidian 的书写体验。

Easy Typing

Easy typing 是一个针对中文输入的优化插件,其内置的规则能做到在不切换输入法的前提下进行中英文的混排。

插件会将一些常见的中文全角符号映射为对应的半角符号,像是中文输入法下连续的 · 将被替换成代码块反引号识别符等等,更多细节可以查看文档

Paste URL into selection

其实直接在 Obsidian 中粘贴网页也能自动转化为超链接的样式,但会使用网页的介绍作为超链接的文本,这个插件能够自动为你选中的文字添加链接,虽然功能很简单,但十分实用。

Paste image rename

顾名思义,这个插件的作用是自动为你粘贴的图片重命名,这样能更好地管理附件图片。

Advanced Tables

Advanced Tables是当前下载数最高的插件,它可以在你编辑表格时自动为你调整表格的样式,这样你在后期修改表格就方便多了。

Minimal

准确来说这个是一个主题,但它有一个自带的设置插件,可以在这里对这个主题自定义设置。

比如我的 Obsidian 界面就被设置成这样:

[ Software ]