Obsidian CLI 是一个命令行界面,让你可以从终端控制 Obsidian,用于脚本编写、自动化以及与外部工具集成。
在 Obsidian 中能做的任何事情,都可以通过命令行完成。Obsidian CLI 甚至包含[[#开发者命令|开发者命令]],可用于访问开发者工具、检查元素、截图、重新加载插件等。
![[obsidian-cli.mp4#interface]]
> [!warning] 需要 Obsidian 1.12 安装程序
> 使用 CLI 需要 Obsidian 1.12 安装程序。请参阅[[更新 Obsidian#安装程序更新|安装程序版本更新指南]]。
## 安装 Obsidian CLI
升级到最新的 [[更新 Obsidian|Obsidian 安装程序版本]](1.11.7)和最新的[[内部版本|内部版本]](1.12.x)。
在 Obsidian 中启用 Obsidian CLI:
1. 前往**设置** → **常规**。
2. 启用**命令行界面**。
3. 按提示注册 Obsidian CLI。
如果安装 Obsidian CLI 时遇到问题,请参阅[[#故障排查]]。
## 快速上手
Obsidian CLI 支持单条命令和终端用户界面(TUI),后者提供交互式帮助和自动补全。
> [!info] Obsidian 应用必须在运行中
> Obsidian CLI 需要 Obsidian 应用处于运行状态。如果 Obsidian 未运行,你执行的第一条命令会启动 Obsidian。
>
> 想要在不运行桌面应用的情况下同步?请参阅 [[Obsidian Headless|Obsidian Headless]]。
### 执行命令
无需打开 TUI 即可执行单条命令:
```shell
# 运行帮助命令
obsidian help
```
### 使用终端界面
输入 `obsidian` 即可使用 TUI。后续命令无需再加 `obsidian` 前缀。
```shell
# 打开 TUI,然后运行 help
obsidian
help
```
TUI 支持自动补全、命令历史和反向搜索。使用 `Ctrl+R` 搜索命令历史。所有可用快捷键请参阅[[#键盘快捷键]]。
## 示例
以下是 Obsidian CLI 的一些使用示例。
### 日常使用
```shell
# 打开今天的日记
obsidian daily
# 向日记中添加任务
obsidian daily:append content="- [ ] Buy groceries"
# 搜索仓库
obsidian search query="meeting notes"
# 读取当前活动文件
obsidian read
# 列出日记中的所有任务
obsidian tasks daily
# 从模板创建新笔记
obsidian create name="Trip to Paris" template=Travel
# 列出仓库中所有标签及其数量
obsidian tags counts
# 比较文件的两个版本
obsidian diff file=README from=1 to=3
```
### 面向开发者
许多[[#开发者命令]]可用于插件和主题开发。这些命令允许智能编码工具自动测试和调试。
```shell
# 打开开发者工具
obsidian devtools
# 重新加载正在开发的社区插件
obsidian plugin:reload id=my-plugin
# 对应用进行截图
obsidian dev:screenshot path=screenshot.png
# 在应用控制台中运行 JavaScript
obsidian eval code="app.vault.getFiles().length"
```
## 操作指南
### 使用参数和标志
命令可以使用**参数**和**标志**。大多数命令不需要任何参数或标志。必填参数标记为 `required`。例如:
```shell
# 使用默认名称"未命名"创建新笔记
obsidian create
```
**参数**接受一个值,写法为 `parameter=value`。如果值包含空格,请用引号包裹:
```shell
# 创建名为"Note"且内容为"Hello world"的新笔记
obsidian create name=Note content="Hello world"
```
**标志**是没有值的布尔开关。包含它即表示开启,例如 `open` 和 `overwrite` 就是标志:
```shell
# 创建笔记并打开它
obsidian create name=Note content="Hello" open overwrite
```
对于多行内容,使用 `\n` 表示换行,使用 `\t` 表示制表符。
```bash
obsidian create name=Note content="# Title\n\nBody text"
```
### 指定仓库
如果终端当前工作目录是一个仓库文件夹,则默认使用该仓库。否则,使用当前活动仓库。
使用 `vault=<name>` 或 `vault=<id>` 指定特定仓库。此参数必须放在命令之前:
```shell
obsidian vault=Notes daily
obsidian vault="My Vault" search query="test"
```
在 TUI 中,使用 `vault:open <name>` 或 `<id>` 切换到不同仓库。
### 指定文件
许多命令接受 `file` 和 `path` 参数来指定特定文件。如果两者都未提供,命令默认作用于活动文件。
- `file=<name>` 使用与 [[内部链接|Wiki 链接]] 相同的链接解析方式解析文件,通过文件名匹配,无需完整路径或扩展名。
- `path=<path>` 需要从仓库根目录开始的完整路径,例如 `folder/note.md`。
```shell
# 如果"Recipe.md"是唯一具有该名称的文件,以下两条命令等效
obsidian read file=Recipe
obsidian read path="Templates/Recipe.md"
```
### 复制输出
在任何命令后添加 `--copy` 可将输出复制到剪贴板:
```shell
read --copy
search query="TODO" --copy
```
## 通用命令
### `help`
显示所有可用命令列表。
| 参数 | 描述 |
| ----------- | --------------------------------- |
| `<command>` | 显示特定命令的帮助信息。 |
### `version`
显示 Obsidian 版本。
### `reload`
重新加载应用窗口。
### `restart`
重启应用。
## 数据库
用于 [[Bases 简介|数据库]] 的命令。
### `bases`
列出仓库中所有 `.base` 文件。
### `base:views`
列出当前数据库文件中的视图。
### `base:create`
在数据库中创建新项目。如果未指定文件,默认使用活动的数据库视图。
```bash
file=<name> # 数据库文件名
path=<path> # 数据库文件路径
view=<name> # 视图名称
name=<name> # 新文件名
content=<text> # 初始内容
open # 创建后打开文件
newtab # 在新标签页中打开
```
### `base:query`
查询数据库并返回结果。
```bash
file=<name> # 数据库文件名
path=<path> # 数据库文件路径
view=<name> # 要查询的视图名称
format=json|csv|tsv|md|paths # 输出格式(默认:json)
```
## 书签
用于[[书签]]的命令。
### `bookmarks`
列出书签。
```bash
total # 返回书签数量
verbose # 包含书签类型
format=json|tsv|csv # 输出格式(默认:tsv)
```
### `bookmark`
添加书签。
```bash
file=<path> # 要添加书签的文件
subpath=<subpath> # 文件内的子路径(标题或块)
folder=<path> # 要添加书签的文件夹
search=<query> # 要添加书签的搜索查询
url=<url> # 要添加书签的 URL
title=<title> # 书签标题
```
## 命令面板
用于[[命令面板]]和[[快捷键]]的命令。包括所有由插件注册的命令。
### `commands`
列出可用的命令 ID。
```bash
filter=<prefix> # 按 ID 前缀筛选
```
### `command`
执行 Obsidian 命令。
```bash
id=<command-id> # (必填)要执行的命令 ID
```
### `hotkeys`
列出所有命令的快捷键。
```bash
total # 返回快捷键数量
verbose # 显示快捷键是否为自定义
format=json|tsv|csv # 输出格式(默认:tsv)
```
### `hotkey`
获取某个命令的快捷键。
```bash
id=<command-id> # (必填)命令 ID
verbose # 显示是自定义还是默认
```
## 日记
用于[[日记]]的命令。
### `daily`
打开日记。
```bash
paneType=tab|split|window # 打开方式
```
### `daily:path`
获取日记路径。即使文件尚未创建也会返回预期路径。
### `daily:read`
读取日记内容。
### `daily:append`
向日记追加内容。
```bash
content=<text> # (必填)要追加的内容
paneType=tab|split|window # 打开方式
inline # 追加时不换行
open # 添加后打开文件
```
### `daily:prepend`
在日记开头插入内容。
```bash
content=<text> # (必填)要插入的内容
paneType=tab|split|window # 打开方式
inline # 插入时不换行
open # 添加后打开文件
```
## 文件历史
### `diff`
列出或比较来自本地[[文件恢复]]和 [[Obsidian 官方同步简介|同步]] 的版本。版本从新到旧编号。
```bash
file=<name> # 文件名
path=<path> # 文件路径
from=<n> # 对比起始版本号
to=<n> # 对比目标版本号
filter=local|sync # 按版本来源筛选
```
**示例:**
```shell
# 列出活动文件的所有版本
diff
# 列出特定文件的所有版本
diff file=Recipe
# 将最新版本与当前文件进行比较
diff file=Recipe from=1
# 比较两个版本
diff file=Recipe from=2 to=1
# 仅显示同步版本
diff filter=sync
```
### `history`
仅列出来自[[文件恢复]]的版本。同步服务的等效命令请参阅 [[#同步|sync:history]]。
```bash
file=<name> # 文件名
path=<path> # 文件路径
```
### `history:list`
列出所有有本地历史的文件。
### `history:read`
读取本地历史版本。
```bash
file=<name> # 文件名
path=<path> # 文件路径
version=<n> # 版本号(默认:1)
```
### `history:restore`
恢复本地历史版本。
```bash
file=<name> # 文件名
path=<path> # 文件路径
version=<n> # (必填)版本号
```
### `history:open`
打开文件恢复。
```bash
file=<name> # 文件名
path=<path> # 文件路径
```
## 文件和文件夹
### `file`
显示文件信息(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
```
示例:
```
path Notes/Recipe.md
name Recipe
extension md
size 1024
created 1700000000000
modified 1700001000000
```
### `files`
列出仓库中的文件。
```bash
folder=<path> # 按文件夹筛选
ext=<extension> # 按扩展名筛选
total # 返回文件数量
```
### `folder`
显示文件夹信息。
```bash
path=<path> # (必填)文件夹路径
info=files|folders|size # 仅返回特定信息
```
### `folders`
列出仓库中的文件夹。
```bash
folder=<path> # 按父文件夹筛选
total # 返回文件夹数量
```
### `open`
打开文件。
```bash
file=<name> # 文件名
path=<path> # 文件路径
newtab # 在新标签页中打开
```
### `create`
创建或覆盖文件。
```bash
name=<name> # 文件名
path=<path> # 文件路径
content=<text> # 初始内容
template=<name> # 使用的模板
overwrite # 如果文件存在则覆盖
open # 创建后打开文件
newtab # 在新标签页中打开
```
### `read`
读取文件内容(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
```
### `append`
向文件追加内容(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
content=<text> # (必填)要追加的内容
inline # 追加时不换行
```
### `prepend`
在前置元数据之后插入内容(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
content=<text> # (必填)要插入的内容
inline # 插入时不换行
```
### `move`
移动或重命名文件(默认:活动文件)。如果在[[设置#始终更新内部链接|仓库设置]]中启用了相关选项,将自动更新[[内部链接]]。
```bash
file=<name> # 文件名
path=<path> # 文件路径
to=<path> # (必填)目标文件夹或路径
```
### `rename`
重命名文件(默认:活动文件)。如果新名称中省略了文件扩展名,将自动保留原扩展名。使用 [[#`move`|move]] 可同时重命名和移动文件。如果在[[设置#始终更新内部链接|仓库设置]]中启用了相关选项,将自动更新[[内部链接]]。
```bash
file=<name> # 文件名
path=<path> # 文件路径
name=<name> # (必填)新文件名
```
### `delete`
删除文件(默认:活动文件,默认移至回收站)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
permanent # 跳过回收站,永久删除
```
## 链接
用于[[反向链接]]和[[出链]]的命令。
### `backlinks`
列出指向某文件的反向链接(默认:活动文件)。
```bash
file=<name> # 目标文件名
path=<path> # 目标文件路径
counts # 包含链接数量
total # 返回反向链接数量
format=json|tsv|csv # 输出格式(默认:tsv)
```
### `links`
列出某文件的出链(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
total # 返回链接数量
```
### `unresolved`
列出仓库中未解析的链接。
```bash
total # 返回未解析链接数量
counts # 包含链接数量
verbose # 包含源文件
format=json|tsv|csv # 输出格式(默认:tsv)
```
### `orphans`
列出没有入链的文件。
```bash
total # 返回孤立文件数量
```
### `deadends`
列出没有出链的文件。
```bash
total # 返回死端文件数量
```
## 大纲
用于[[大纲]]的命令。
### `outline`
显示当前文件的标题。
```bash
file=<name> # 文件名
path=<path> # 文件路径
format=tree|md|json # 输出格式(默认:tree)
total # 返回标题数量
```
## 插件
用于[[核心插件]]和[[第三方插件]]的命令。
### `plugins`
列出已安装的插件。
```bash
filter=core|community # 按插件类型筛选
versions # 包含版本号
format=json|tsv|csv # 输出格式(默认:tsv)
```
### `plugins:enabled`
列出已启用的插件。
```bash
filter=core|community # 按插件类型筛选
versions # 包含版本号
format=json|tsv|csv # 输出格式(默认:tsv)
```
### `plugins:restrict`
切换或检查受限模式。
```bash
on # 启用受限模式
off # 禁用受限模式
```
### `plugin`
获取插件信息。
```bash
id=<plugin-id> # (必填)插件 ID
```
### `plugin:enable`
启用插件。
```bash
id=<id> # (必填)插件 ID
filter=core|community # 插件类型
```
### `plugin:disable`
禁用插件。
```bash
id=<id> # (必填)插件 ID
filter=core|community # 插件类型
```
### `plugin:install`
安装社区插件。
```bash
id=<id> # (必填)插件 ID
enable # 安装后启用
```
### `plugin:uninstall`
卸载社区插件。
```bash
id=<id> # (必填)插件 ID
```
### `plugin:reload`
重新加载插件(面向开发者)。
```bash
id=<id> # (必填)插件 ID
```
## 属性
与[[属性]]相关的命令。
### `aliases`
列出仓库中的别名。使用 `active` 或 `file`/`path` 可显示特定文件的别名。
```bash
file=<name> # 文件名
path=<path> # 文件路径
total # 返回别名数量
verbose # 包含文件路径
active # 显示活动文件的别名
```
### `properties`
列出仓库中的属性。使用 `active` 或 `file`/`path` 可显示特定文件的属性。
```bash
file=<name> # 显示指定文件的属性
path=<path> # 显示指定路径文件的属性
name=<name> # 获取特定属性的数量
sort=count # 按数量排序(默认:按名称)
format=yaml|json|tsv # 输出格式(默认:yaml)
total # 返回属性数量
counts # 包含出现次数
active # 显示活动文件的属性
```
### `property:set`
在文件上设置属性(默认:活动文件)。
```bash
name=<name> # (必填)属性名称
value=<value> # (必填)属性值
type=text|list|number|checkbox|date|datetime # 属性类型
file=<name> # 文件名
path=<path> # 文件路径
```
### `property:remove`
从文件中移除属性(默认:活动文件)。
```bash
name=<name> # (必填)属性名称
file=<name> # 文件名
path=<path> # 文件路径
```
### `property:read`
从文件中读取属性值(默认:活动文件)。
```bash
name=<name> # (必填)属性名称
file=<name> # 文件名
path=<path> # 文件路径
```
## 发布
用于 [[发布服务简介|Obsidian Publish]] 的命令。
### `publish:site`
显示发布站点信息(slug、URL)。
### `publish:list`
列出已发布的文件。
```bash
total # 返回已发布文件数量
```
### `publish:status`
列出发布变更。
```bash
total # 返回变更数量
new # 仅显示新文件
changed # 仅显示已更改的文件
deleted # 仅显示已删除的文件
```
### `publish:add`
发布文件或所有已更改的文件(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
changed # 发布所有已更改的文件
```
### `publish:remove`
取消发布文件(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
```
### `publish:open`
在发布站点上打开文件(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
```
## 随机笔记
用于[[漫游笔记]]的命令。
### `random`
打开一篇随机笔记。
```bash
folder=<path> # 限定在某文件夹内
newtab # 在新标签页中打开
```
### `random:read`
读取一篇随机笔记(包含路径)。
```bash
folder=<path> # 限定在某文件夹内
```
## 搜索
用于[[搜索]]的命令。
### `search`
搜索仓库中的文本。返回匹配的文件路径。
```bash
query=<text> # (必填)搜索查询
path=<folder> # 限定在某文件夹内
limit=<n> # 最大文件数
format=text|json # 输出格式(默认:text)
total # 返回匹配数量
case # 区分大小写
```
### `search:context`
带上下文的搜索。返回 grep 风格的 `path:line: text` 输出。
```bash
query=<text> # (必填)搜索查询
path=<folder> # 限定在某文件夹内
limit=<n> # 最大文件数
format=text|json # 输出格式(默认:text)
case # 区分大小写
```
### `search:open`
打开搜索视图。
```bash
query=<text> # 初始搜索查询
```
## 同步
用于 [[Obsidian 官方同步简介|Obsidian Sync]] 的命令。
> [!tip] 无需桌面应用即可同步
> 这些命令控制运行中的 Obsidian 应用内的同步功能。要在不使用桌面应用的情况下从命令行同步仓库,请参阅 [[Headless Sync]]。
### `sync`
暂停或恢复同步。
```bash
on # 恢复同步
off # 暂停同步
```
### `sync:status`
显示同步状态和使用情况。
### `sync:history`
列出文件的同步版本历史(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
total # 返回版本数量
```
### `sync:read`
读取同步版本(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
version=<n> # (必填)版本号
```
### `sync:restore`
恢复同步版本(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
version=<n> # (必填)版本号
```
### `sync:open`
打开同步历史(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
```
### `sync:deleted`
列出同步中已删除的文件。
```bash
total # 返回已删除文件数量
```
## 标签
用于[[标签]]的命令。
### `tags`
列出仓库中的标签。使用 `active` 或 `file`/`path` 可显示特定文件的标签。
```bash
file=<name> # 文件名
path=<path> # 文件路径
sort=count # 按数量排序(默认:按名称)
total # 返回标签数量
counts # 包含标签数量
format=json|tsv|csv # 输出格式(默认:tsv)
active # 显示活动文件的标签
```
### `tag`
获取标签信息。
```bash
name=<tag> # (必填)标签名称
total # 返回出现次数
verbose # 包含文件列表和数量
```
## 任务
用于任务管理的命令。
### `tasks`
列出仓库中的任务。使用 `active` 或 `file`/`path` 可显示特定文件的任务。
```bash
file=<name> # 按文件名筛选
path=<path> # 按文件路径筛选
status="<char>" # 按状态字符筛选
total # 返回任务数量
done # 显示已完成的任务
todo # 显示未完成的任务
verbose # 按文件分组并显示行号
format=json|tsv|csv # 输出格式(默认:text)
active # 显示活动文件的任务
daily # 显示日记中的任务
```
**示例:**
```bash
# 列出仓库中所有任务
tasks
# 列出仓库中未完成的任务
tasks todo
# 列出特定文件中已完成的任务
tasks file=Recipe done
# 列出今天日记中的任务
tasks daily
# 统计日记中的任务数量
tasks daily total
# 列出任务及其文件路径和行号
tasks verbose
# 按自定义状态筛选(引号包裹特殊字符)
tasks 'status=?'
```
### `task`
显示或更新任务。
```bash
ref=<path:line> # 任务引用(path:line)
file=<name> # 文件名
path=<path> # 文件路径
line=<n> # 行号
status="<char>" # 设置状态字符
toggle # 切换任务状态
daily # 日记
done # 标记为已完成
todo # 标记为未完成
```
**示例:**
```bash
# 显示任务信息
task file=Recipe line=8
task ref="Recipe.md:8"
# 切换任务完成状态
task ref="Recipe.md:8" toggle
# 切换日记中的任务
task daily line=3 toggle
# 设置任务状态
task file=Recipe line=8 done # → [x]
task file=Recipe line=8 todo # → [ ]
task file=Recipe line=8 status=- # → [-]
task daily line=3 done # 将日记任务标记为已完成
```
## 模板
用于[[核心插件/模板|模板]]的命令。
### `templates`
列出模板。
```bash
total # 返回模板数量
```
### `template:read`
读取模板内容。
```bash
name=<template> # (必填)模板名称
title=<title> # 用于变量解析的标题
resolve # 解析模板变量
```
### `template:insert`
将模板插入活动文件。
```bash
name=<template> # (必填)模板名称
```
**说明:**
- `resolve` 选项处理 `{{date}}`、`{{time}}`、`{{title}}` 变量
- 使用 `create path=<path> template=<name>` 可基于模板创建文件
## 主题和片段
用于[[主题]]和 [[CSS 代码片段]]的命令。
### `themes`
列出已安装的主题。
```bash
versions # 包含版本号
```
### `theme`
显示当前主题或获取信息。
```bash
name=<name> # 要查看详情的主题名称
```
### `theme:set`
设置当前主题。
```bash
name=<name> # (必填)主题名称(留空则使用默认主题)
```
### `theme:install`
安装社区主题。
```bash
name=<name> # (必填)主题名称
enable # 安装后激活
```
### `theme:uninstall`
卸载主题。
```bash
name=<name> # (必填)主题名称
```
### `snippets`
列出已安装的 CSS 代码片段。
### `snippets:enabled`
列出已启用的 CSS 代码片段。
### `snippet:enable`
启用 CSS 代码片段。
```bash
name=<name> # (必填)片段名称
```
### `snippet:disable`
禁用 CSS 代码片段。
```bash
name=<name> # (必填)片段名称
```
## 时间戳笔记
用于[[时间戳笔记生成器]]的命令。
### `unique`
创建时间戳笔记。
```bash
name=<text> # 笔记名称
content=<text> # 初始内容
paneType=tab|split|window # 打开方式
open # 创建后打开文件
```
## 仓库
### `vault`
显示仓库信息。
```bash
info=name|path|files|folders|size # 仅返回特定信息
```
### `vaults`
列出已知仓库。
```bash
total # 返回仓库数量
verbose # 包含仓库路径
```
### `vault:open`
切换到其他仓库(仅限 TUI)。
```bash
name=<name> # (必填)仓库名称
```
## 网页浏览器
用于[[网页查看器|网页浏览器]]的命令。
### `web`
在网页浏览器中打开 URL。
```bash
url=<url> # (必填)要打开的 URL
newtab # 在新标签页中打开
```
## 字数统计
用于[[字数统计]]的命令。
### `wordcount`
统计字数和字符数(默认:活动文件)。
```bash
file=<name> # 文件名
path=<path> # 文件路径
words # 仅返回字数
characters # 仅返回字符数
```
## 工作区
用于[[工作区]]和[[工作区]]插件的命令。
### `workspace`
显示工作区树。
```bash
ids # 包含工作区项目 ID
```
### `workspaces`
列出已保存的工作区。
```bash
total # 返回工作区数量
```
### `workspace:save`
将当前布局保存为工作区。
```bash
name=<name> # 工作区名称
```
### `workspace:load`
加载已保存的工作区。
```bash
name=<name> # (必填)工作区名称
```
### `workspace:delete`
删除已保存的工作区。
```bash
name=<name> # (必填)工作区名称
```
### `tabs`
列出打开的标签页。
```bash
ids # 包含标签页 ID
```
### `tab:open`
打开新标签页。
```bash
group=<id> # 标签页组 ID
file=<path> # 要打开的文件
view=<type> # 要打开的视图类型
```
### `recents`
列出最近打开的文件。
```bash
total # 返回最近文件数量
```
## 开发者命令
帮助你开发[[第三方插件]]和[[主题]]的命令。前往 [Obsidian 开发者文档](https://docs.obsidian.md) 了解更多。
### `devtools`
切换 Electron 开发者工具。
### `dev:debug`
附加/分离 Chrome DevTools Protocol 调试器。
```bash
on # 附加调试器
off # 分离调试器
```
### `dev:cdp`
运行 Chrome DevTools Protocol 命令。
```bash
method=<CDP.method> # (必填)CDP 方法
params=<json> # 方法参数(JSON 格式)
```
### `dev:errors`
显示捕获的 JavaScript 错误。
```bash
clear # 清除错误缓冲区
```
### `dev:screenshot`
截图(返回 base64 PNG)。
```bash
path=<filename> # 输出文件路径
```
### `dev:console`
显示捕获的控制台消息。
```bash
limit=<n> # 最大消息数(默认 50)
level=log|warn|error|info|debug # 按日志级别筛选
clear # 清除控制台缓冲区
```
### `dev:css`
检查 CSS 及其源位置。
```bash
selector=<css> # (必填)CSS 选择器
prop=<name> # 按属性名筛选
```
### `dev:dom`
查询 DOM 元素。
```bash
selector=<css> # (必填)CSS 选择器
attr=<name> # 获取属性值
css=<prop> # 获取 CSS 属性值
total # 返回元素数量
text # 返回文本内容
inner # 返回 innerHTML 而非 outerHTML
all # 返回所有匹配项而非第一个
```
### `dev:mobile`
切换移动端模拟。
```bash
on # 启用移动端模拟
off # 禁用移动端模拟
```
### `eval`
执行 JavaScript 并返回结果。
```bash
code=<javascript> # (必填)要执行的 JavaScript 代码
```
## 键盘快捷键
这些快捷键在[[#使用终端界面|TUI]]中可用。
### 导航
| 操作 | 快捷键 |
| ----------------------------------------------------- | -------------- |
| 左移光标 | `←` / `Ctrl+B` |
| 右移光标(在行尾时接受建议) | `→` / `Ctrl+F` |
| 跳转到行首 | `Ctrl+A` |
| 跳转到行尾 | `Ctrl+E` |
| 后退一个单词 | `Alt+B` |
| 前进一个单词 | `Alt+F` |
### 编辑
| 操作 | 快捷键 |
| ----------------------- | -------------------------- |
| 删除到行首 | `Ctrl+U` |
| 删除到行尾 | `Ctrl+K` |
| 删除前一个单词 | `Ctrl+W` / `Alt+Backspace` |
### 自动补全
| 操作 | 快捷键 |
| -------------------------------------------------- | ----------- |
| 进入建议模式 / 接受选中的建议 | `Tab` |
| 退出建议模式 | `Shift+Tab` |
| 进入建议模式(从新输入开始) | `↓` |
| 接受第一个/选中的建议(在行尾时) | `→` |
### 历史
| 操作 | 快捷键 |
| ---------------------------------------------------------- | -------------- |
| 上一条历史记录 / 向上浏览建议 | `↑` / `Ctrl+P` |
| 下一条历史记录 / 向下浏览建议 | `↓` / `Ctrl+N` |
| 反向历史搜索(输入筛选,`Ctrl+R` 循环) | `Ctrl+R` |
### 其他
| 操作 | 快捷键 |
| ------------------------------------------------------ | ------------------- |
| 执行命令或接受建议 | `Enter` |
| 撤销自动补全 / 退出建议模式 / 清除输入 | `Escape` |
| 清屏 | `Ctrl+L` |
| 退出 | `Ctrl+C` / `Ctrl+D` |
## 故障排查
如果运行 Obsidian CLI 时遇到问题:
- 确保使用的是最新的 [[更新 Obsidian|Obsidian 安装程序版本]](1.12.4 或更高)。
- 注册 CLI 后请重启终端,以使 PATH 更改生效。
- Obsidian 必须正在运行。CLI 连接到正在运行的 Obsidian 实例。如果 Obsidian 未运行,第一条 CLI 命令会启动应用。
### Windows
Windows 上的 Obsidian CLI 需要 Obsidian 1.12.4+ 安装程序。请参阅[[更新 Obsidian|安装程序版本更新]]。
Windows 使用终端重定向器将 Obsidian 正确连接到 stdin/stdout。这是必要的,因为 Obsidian 通常作为 GUI 应用运行,与 Windows 上的终端输出不兼容。安装 Obsidian 1.12.4+ 后,`Obsidian.com` 终端重定向器将被添加到安装 `Obsidian.exe` 文件的文件夹中。
### macOS
CLI 注册会通过 `~/.zprofile` 将 Obsidian 二进制目录添加到 PATH 中。如果遇到问题,请检查以下内容:
你的 `~/.zprofile` 文件应包含以下行。如果缺少,可以手动添加:
```
export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"
```
#### 其他 shell
CLI 注册仅修改 `~/.zprofile`,它由 zsh(macOS 默认 shell)使用。如果你使用其他 shell,请手动将 Obsidian 二进制目录添加到你的 shell 配置文件中:
- Bash:将 `export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"` 添加到 `~/.bash_profile`
- Fish:运行 `fish_add_path /Applications/Obsidian.app/Contents/MacOS`
### Linux
CLI 注册会在 `/usr/local/bin/obsidian` 创建指向 Obsidian 二进制文件的符号链接(需要 sudo)。
#### AppImage
对于 AppImage 安装,符号链接指向 `.AppImage` 文件而非内部二进制文件,因为挂载路径每次启动都会改变。如果 sudo 失败,符号链接会作为备选方案创建在 `~/.local/bin/obsidian`。如果遇到问题,请检查以下内容。
检查符号链接是否存在且指向正确的二进制文件:
```
ls -l /usr/local/bin/obsidian
```
如果符号链接缺失,请手动创建:
```
sudo ln -s /path/to/obsidian /usr/local/bin/obsidian
```
如果符号链接创建在了 `~/.local/bin/` 中,请确保该目录在你的 PATH 中。将以下内容添加到 `~/.bashrc` 或 `~/.zshrc`:
```
export PATH="$PATH:$HOME/.local/bin"
```
如果移动或重命名 `.AppImage` 文件后符号链接失效,请重新注册 CLI 或手动更新符号链接。
#### Snap
Snap 包将内部版本数据存储在其自己的用户数据目录中。如果 CLI 未检测到内部版本的 `.asar`,请将 `XDG_CONFIG_HOME` 设置为指向 Snap 配置路径:
```
export XDG_CONFIG_HOME="$HOME/snap/obsidian/current/.config"
```
将此添加到 `~/.bashrc` 或 `~/.zshrc` 以使其持久生效。
#### Flatpak
Obsidian 会尝试自动完成此操作,但以下是手动说明。如果是系统级安装:
```
ln -s /var/lib/flatpak/exports/bin/md.obsidian.Obsidian ~/.local/bin/obsidian
```
如果是用户级安装:
```
ln -s ~/.local/share/flatpak/exports/bin/md.obsidian.Obsidian ~/.local/bin/obsidian
```