Obsidian CLI là một giao diện dòng lệnh cho phép bạn điều khiển Obsidian từ terminal để viết kịch bản, tự động hóa và tích hợp với các công cụ bên ngoài.
Mọi thứ bạn có thể làm trong Obsidian đều có thể thực hiện từ dòng lệnh. Obsidian CLI thậm chí còn bao gồm [[#Lệnh dành cho nhà phát triển|lệnh dành cho nhà phát triển]] để truy cập công cụ phát triển, kiểm tra phần tử, chụp ảnh màn hình, tải lại plugin và nhiều hơn nữa.
![[obsidian-cli.mp4#interface]]
> [!warning] Yêu cầu trình cài đặt Obsidian 1.12
> Sử dụng CLI yêu cầu trình cài đặt Obsidian 1.12. Xem [[Cập nhật Obsidian#Cập nhật trình cài đặt|hướng dẫn cập nhật phiên bản trình cài đặt]].
## Cài đặt Obsidian CLI
Nâng cấp lên [[Cập nhật Obsidian|phiên bản trình cài đặt Obsidian]] mới nhất (1.12.7+).
Kích hoạt Obsidian CLI trong Obsidian:
1. Đi tới **Cài đặt** → **Chung**.
2. Kích hoạt **Giao diện dòng lệnh**.
3. Làm theo hướng dẫn để đăng ký Obsidian CLI.
Nếu bạn gặp vấn đề khi cài đặt Obsidian CLI, xem [[#Khắc phục sự cố]].
## Bắt đầu
Obsidian CLI hỗ trợ cả lệnh đơn và giao diện người dùng terminal (TUI) với trợ giúp tương tác và tự động hoàn tất.
> [!info] Ứng dụng Obsidian phải đang chạy
> Obsidian CLI yêu cầu ứng dụng Obsidian đang chạy. Nếu Obsidian chưa chạy, lệnh đầu tiên bạn thực thi sẽ khởi chạy Obsidian.
>
> Muốn đồng bộ hóa mà không cần ứng dụng desktop? Xem [[Obsidian Headless|Obsidian Headless]].
### Chạy một lệnh
Chạy một lệnh đơn lẻ mà không mở TUI:
```shell
# Chạy lệnh trợ giúp
obsidian help
```
### Sử dụng giao diện terminal
Sử dụng TUI bằng cách nhập `obsidian`. Các lệnh tiếp theo có thể được nhập mà không cần `obsidian`.
```shell
# Mở TUI, sau đó chạy help
obsidian
help
```
TUI hỗ trợ tự động hoàn tất, lịch sử lệnh và tìm kiếm ngược. Sử dụng `Ctrl+R` để tìm kiếm lịch sử lệnh. Xem [[#Phím tắt]] để biết tất cả phím tắt có sẵn.
## Ví dụ
Dưới đây là một số ví dụ về những gì Obsidian CLI có thể làm.
### Sử dụng hàng ngày
```shell
# Mở ghi chú hàng ngày hôm nay
obsidian daily
# Thêm một tác vụ vào ghi chú hàng ngày
obsidian daily:append content="- [ ] Mua đồ tạp hóa"
# Tìm kiếm trong kho
obsidian search query="ghi chú cuộc họp"
# Đọc tệp đang hoạt động
obsidian read
# Liệt kê tất cả tác vụ từ ghi chú hàng ngày
obsidian tasks daily
# Tạo ghi chú mới từ mẫu
obsidian create name="Chuyến đi Paris" template=Travel
# Liệt kê tất cả thẻ trong kho với số lượng
obsidian tags counts
# So sánh hai phiên bản của một tệp
obsidian diff file=README from=1 to=3
```
### Dành cho nhà phát triển
Nhiều [[#Lệnh dành cho nhà phát triển]] có sẵn cho việc phát triển plugin và chủ đề. Các lệnh này cho phép các công cụ lập trình tự động kiểm tra và gỡ lỗi.
```shell
# Mở công cụ phát triển
obsidian devtools
# Tải lại một plugin cộng đồng bạn đang phát triển
obsidian plugin:reload id=my-plugin
# Chụp ảnh màn hình ứng dụng
obsidian dev:screenshot path=screenshot.png
# Chạy JavaScript trong bảng điều khiển ứng dụng
obsidian eval code="app.vault.getFiles().length"
```
## Hướng dẫn
### Sử dụng tham số và cờ
Các lệnh có thể sử dụng **tham số** và **cờ**. Hầu hết các lệnh không yêu cầu tham số hoặc cờ nào. Các tham số bắt buộc được đánh dấu là `required`. Ví dụ:
```shell
# Tạo ghi chú mới sử dụng tên mặc định "Untitled"
obsidian create
```
Một **tham số** nhận một giá trị, được viết dưới dạng `parameter=value`. Nếu giá trị có khoảng trắng, hãy bọc trong dấu ngoặc kép:
```shell
# Tạo ghi chú mới có tên "Note" với nội dung "Hello world"
obsidian create name=Note content="Hello world"
```
Một **cờ** là một công tắc boolean không có giá trị. Thêm nó vào để bật, ví dụ `open` và `overwrite` là các cờ:
```shell
# Tạo ghi chú và mở nó
obsidian create name=Note content="Hello" open overwrite
```
Đối với nội dung nhiều dòng, sử dụng `\n` cho dòng mới. Sử dụng `\t` cho tab.
```bash
obsidian create name=Note content="# Tiêu đề\n\nNội dung văn bản"
```
### Chỉ định kho
Nếu thư mục làm việc hiện tại của terminal là thư mục kho, kho đó sẽ được sử dụng theo mặc định. Nếu không, kho đang hoạt động sẽ được sử dụng.
Sử dụng `vault=<name>` hoặc `vault=<id>` để chỉ định một kho cụ thể. Tham số này phải đứng đầu tiên trước lệnh của bạn:
```shell
obsidian vault=Notes daily
obsidian vault="My Vault" search query="test"
```
Trong TUI, sử dụng `vault:open <name>` hoặc `<id>` để chuyển sang kho khác.
### Chỉ định tệp
Nhiều lệnh chấp nhận tham số `file` và `path` để chỉ định một tệp cụ thể. Nếu không cung cấp, lệnh sẽ mặc định sử dụng tệp đang hoạt động.
- `file=<name>` phân giải tệp sử dụng cùng cách phân giải liên kết như [[Liên kết nội bộ|liên kết wiki]], khớp theo tên tệp mà không yêu cầu đường dẫn đầy đủ hoặc phần mở rộng.
- `path=<path>` yêu cầu đường dẫn chính xác từ gốc kho, ví dụ `folder/note.md`.
```shell
# Các lệnh sau tương đương nếu "Recipe.md" là tệp duy nhất có tên đó
obsidian read file=Recipe
obsidian read path="Templates/Recipe.md"
```
### Sao chép đầu ra
Thêm `--copy` vào bất kỳ lệnh nào để sao chép đầu ra vào bảng tạm:
```shell
read --copy
search query="TODO" --copy
```
## Lệnh chung
### `help`
Hiển thị danh sách tất cả các lệnh có sẵn.
| Tham số | Mô tả |
| ----------- | ----------------------------------- |
| `<command>` | Hiển thị trợ giúp cho lệnh cụ thể. |
### `version`
Hiển thị phiên bản Obsidian.
### `reload`
Tải lại cửa sổ ứng dụng.
### `restart`
Khởi động lại ứng dụng.
## Cơ sở
Lệnh cho [[Giới thiệu về Cơ sở|Cơ sở]].
### `bases`
Liệt kê tất cả tệp `.base` trong kho.
### `base:views`
Liệt kê các chế độ xem trong tệp cơ sở hiện tại.
### `base:create`
Tạo một mục mới trong cơ sở. Mặc định sử dụng chế độ xem cơ sở đang hoạt động nếu không chỉ định tệp.
```bash
file=<name> # tên tệp cơ sở
path=<path> # đường dẫn tệp cơ sở
view=<name> # tên chế độ xem
name=<name> # tên tệp mới
content=<text> # nội dung ban đầu
open # mở tệp sau khi tạo
newtab # mở trong thẻ mới
```
### `base:query`
Truy vấn một cơ sở và trả về kết quả.
```bash
file=<name> # tên tệp cơ sở
path=<path> # đường dẫn tệp cơ sở
view=<name> # tên chế độ xem để truy vấn
format=json|csv|tsv|md|paths # định dạng đầu ra (mặc định: json)
```
## Đánh dấu
Lệnh cho [[Đánh dấu]].
### `bookmarks`
Liệt kê dấu trang.
```bash
total # trả về số lượng dấu trang
verbose # bao gồm loại dấu trang
format=json|tsv|csv # định dạng đầu ra (mặc định: tsv)
```
### `bookmark`
Thêm dấu trang.
```bash
file=<path> # tệp cần đánh dấu
subpath=<subpath> # đường dẫn con (tiêu đề hoặc khối) trong tệp
folder=<path> # thư mục cần đánh dấu
search=<query> # truy vấn tìm kiếm cần đánh dấu
url=<url> # URL cần đánh dấu
title=<title> # tiêu đề dấu trang
```
## Bảng lệnh
Lệnh cho [[Khay lệnh]] và [[Phím tắt]]. Bao gồm tất cả lệnh được đăng ký bởi plugin.
### `commands`
Liệt kê ID lệnh có sẵn.
```bash
filter=<prefix> # lọc theo tiền tố ID
```
### `command`
Thực thi một lệnh Obsidian.
```bash
id=<command-id> # (bắt buộc) ID lệnh cần thực thi
```
### `hotkeys`
Liệt kê phím tắt cho tất cả lệnh.
```bash
total # trả về số lượng phím tắt
verbose # hiển thị phím tắt có phải tùy chỉnh không
format=json|tsv|csv # định dạng đầu ra (mặc định: tsv)
```
### `hotkey`
Lấy phím tắt cho một lệnh.
```bash
id=<command-id> # (bắt buộc) ID lệnh
verbose # hiển thị tùy chỉnh hay mặc định
```
## Ghi chú hàng ngày
Lệnh cho [[Ghi chú hàng ngày]].
### `daily`
Mở ghi chú hàng ngày.
```bash
paneType=tab|split|window # loại panel để mở
```
### `daily:path`
Lấy đường dẫn ghi chú hàng ngày. Trả về đường dẫn dự kiến ngay cả khi tệp chưa được tạo.
### `daily:read`
Đọc nội dung ghi chú hàng ngày.
### `daily:append`
Thêm nội dung vào cuối ghi chú hàng ngày.
```bash
content=<text> # (bắt buộc) nội dung cần thêm
paneType=tab|split|window # loại panel để mở
inline # thêm mà không xuống dòng
open # mở tệp sau khi thêm
```
### `daily:prepend`
Thêm nội dung vào đầu ghi chú hàng ngày.
```bash
content=<text> # (bắt buộc) nội dung cần thêm
paneType=tab|split|window # loại panel để mở
inline # thêm mà không xuống dòng
open # mở tệp sau khi thêm
```
## Lịch sử tệp
### `diff`
Liệt kê hoặc so sánh các phiên bản từ [[Khôi phục tập tin]] cục bộ và [[Giới thiệu về Obsidian Sync|Sync]]. Các phiên bản được đánh số từ mới nhất đến cũ nhất.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
from=<n> # số phiên bản để so sánh từ
to=<n> # số phiên bản để so sánh đến
filter=local|sync # lọc theo nguồn phiên bản
```
**Ví dụ:**
```shell
# Liệt kê tất cả phiên bản của tệp đang hoạt động
diff
# Liệt kê tất cả phiên bản của một tệp cụ thể
diff file=Recipe
# So sánh phiên bản mới nhất với tệp hiện tại
diff file=Recipe from=1
# So sánh hai phiên bản
diff file=Recipe from=2 to=1
# Chỉ hiển thị phiên bản Sync
diff filter=sync
```
### `history`
Liệt kê các phiên bản từ [[Khôi phục tập tin]] chỉ. Xem [[#Sync|sync:history]] cho lệnh Sync tương đương.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
### `history:list`
Liệt kê tất cả tệp có lịch sử cục bộ.
### `history:read`
Đọc một phiên bản lịch sử cục bộ.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
version=<n> # số phiên bản (mặc định: 1)
```
### `history:restore`
Khôi phục một phiên bản lịch sử cục bộ.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
version=<n> # (bắt buộc) số phiên bản
```
### `history:open`
Mở khôi phục tập tin.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
## Tệp và thư mục
### `file`
Hiển thị thông tin tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
Ví dụ:
```
path Notes/Recipe.md
name Recipe
extension md
size 1024
created 1700000000000
modified 1700001000000
```
### `files`
Liệt kê tệp trong kho.
```bash
folder=<path> # lọc theo thư mục
ext=<extension> # lọc theo phần mở rộng
total # trả về số lượng tệp
```
### `folder`
Hiển thị thông tin thư mục.
```bash
path=<path> # (bắt buộc) đường dẫn thư mục
info=files|folders|size # chỉ trả về thông tin cụ thể
```
### `folders`
Liệt kê thư mục trong kho.
```bash
folder=<path> # lọc theo thư mục cha
total # trả về số lượng thư mục
```
### `open`
Mở một tệp.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
newtab # mở trong thẻ mới
```
### `create`
Tạo hoặc ghi đè một tệp.
```bash
name=<name> # tên tệp
path=<path> # đường dẫn tệp
content=<text> # nội dung ban đầu
template=<name> # mẫu để sử dụng
overwrite # ghi đè nếu tệp đã tồn tại
open # mở tệp sau khi tạo
newtab # mở trong thẻ mới
```
### `read`
Đọc nội dung tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
### `append`
Thêm nội dung vào cuối tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
content=<text> # (bắt buộc) nội dung cần thêm
inline # thêm mà không xuống dòng
```
### `prepend`
Thêm nội dung sau siêu dữ liệu đầu tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
content=<text> # (bắt buộc) nội dung cần thêm
inline # thêm mà không xuống dòng
```
### `move`
Di chuyển hoặc đổi tên tệp (mặc định: tệp đang hoạt động). Lệnh này sẽ tự động cập nhật [[Liên kết nội bộ]] nếu được bật trong [[Cài đặt#Luôn cập nhật liên kết nội bộ|cài đặt kho]].
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
to=<path> # (bắt buộc) thư mục hoặc đường dẫn đích
```
### `rename`
Đổi tên tệp (mặc định: tệp đang hoạt động). Phần mở rộng tệp được giữ nguyên tự động nếu bỏ qua trong tên mới. Sử dụng [[#`move`|move]] để đổi tên và di chuyển tệp cùng lúc. Lệnh này sẽ tự động cập nhật [[Liên kết nội bộ]] nếu được bật trong [[Cài đặt#Luôn cập nhật liên kết nội bộ|cài đặt kho]].
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
name=<name> # (bắt buộc) tên tệp mới
```
### `delete`
Xóa tệp (mặc định: tệp đang hoạt động, chuyển vào thùng rác theo mặc định).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
permanent # bỏ qua thùng rác, xóa vĩnh viễn
```
## Liên kết
Lệnh cho [[Liên kết đến]] và [[Liên kết đi ra]].
### `backlinks`
Liệt kê liên kết ngược đến tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp đích
path=<path> # đường dẫn tệp đích
counts # bao gồm số lượng liên kết
total # trả về số lượng liên kết ngược
format=json|tsv|csv # định dạng đầu ra (mặc định: tsv)
```
### `links`
Liệt kê liên kết đi ra từ tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
total # trả về số lượng liên kết
```
### `unresolved`
Liệt kê liên kết chưa phân giải trong kho.
```bash
total # trả về số lượng liên kết chưa phân giải
counts # bao gồm số lượng liên kết
verbose # bao gồm tệp nguồn
format=json|tsv|csv # định dạng đầu ra (mặc định: tsv)
```
### `orphans`
Liệt kê tệp không có liên kết đến.
```bash
total # trả về số lượng tệp mô côi
```
### `deadends`
Liệt kê tệp không có liên kết đi ra.
```bash
total # trả về số lượng tệp ngõ cụt
```
## Dàn ý
Lệnh cho [[Đề cương]].
### `outline`
Hiển thị tiêu đề cho tệp hiện tại.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
format=tree|md|json # định dạng đầu ra (mặc định: tree)
total # trả về số lượng tiêu đề
```
## Plugin
Lệnh cho [[Plugin cốt lõi]] và [[Phần mở rộng từ cộng đồng]].
### `plugins`
Liệt kê plugin đã cài đặt.
```bash
filter=core|community # lọc theo loại plugin
versions # bao gồm số phiên bản
format=json|tsv|csv # định dạng đầu ra (mặc định: tsv)
```
### `plugins:enabled`
Liệt kê plugin đã bật.
```bash
filter=core|community # lọc theo loại plugin
versions # bao gồm số phiên bản
format=json|tsv|csv # định dạng đầu ra (mặc định: tsv)
```
### `plugins:restrict`
Bật/tắt hoặc kiểm tra chế độ hạn chế.
```bash
on # bật chế độ hạn chế
off # tắt chế độ hạn chế
```
### `plugin`
Lấy thông tin plugin.
```bash
id=<plugin-id> # (bắt buộc) ID plugin
```
### `plugin:enable`
Kích hoạt một plugin.
```bash
id=<id> # (bắt buộc) ID plugin
filter=core|community # loại plugin
```
### `plugin:disable`
Vô hiệu hóa một plugin.
```bash
id=<id> # (bắt buộc) ID plugin
filter=core|community # loại plugin
```
### `plugin:install`
Cài đặt một plugin cộng đồng.
```bash
id=<id> # (bắt buộc) ID plugin
enable # kích hoạt sau khi cài đặt
```
### `plugin:uninstall`
Gỡ bỏ cài đặt một plugin cộng đồng.
```bash
id=<id> # (bắt buộc) ID plugin
```
### `plugin:reload`
Tải lại plugin (dành cho nhà phát triển).
```bash
id=<id> # (bắt buộc) ID plugin
```
## Thuộc tính
Lệnh liên quan đến [[Thuộc tính]].
### `aliases`
Liệt kê bí danh trong kho. Sử dụng `active` hoặc `file`/`path` để hiển thị bí danh cho một tệp cụ thể.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
total # trả về số lượng bí danh
verbose # bao gồm đường dẫn tệp
active # hiển thị bí danh cho tệp đang hoạt động
```
### `properties`
Liệt kê thuộc tính trong kho. Sử dụng `active` hoặc `file`/`path` để hiển thị thuộc tính cho một tệp cụ thể.
```bash
file=<name> # hiển thị thuộc tính cho tệp
path=<path> # hiển thị thuộc tính cho đường dẫn
name=<name> # lấy số lượng thuộc tính cụ thể
sort=count # sắp xếp theo số lượng (mặc định: name)
format=yaml|json|tsv # định dạng đầu ra (mặc định: yaml)
total # trả về số lượng thuộc tính
counts # bao gồm số lần xuất hiện
active # hiển thị thuộc tính cho tệp đang hoạt động
```
### `property:set`
Đặt thuộc tính trên tệp (mặc định: tệp đang hoạt động).
```bash
name=<name> # (bắt buộc) tên thuộc tính
value=<value> # (bắt buộc) giá trị thuộc tính
type=text|list|number|checkbox|date|datetime # loại thuộc tính
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
### `property:remove`
Xóa thuộc tính khỏi tệp (mặc định: tệp đang hoạt động).
```bash
name=<name> # (bắt buộc) tên thuộc tính
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
### `property:read`
Đọc giá trị thuộc tính từ tệp (mặc định: tệp đang hoạt động).
```bash
name=<name> # (bắt buộc) tên thuộc tính
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
## Publish
Lệnh cho [[Giới thiệu về Obsidian Publish|Obsidian Publish]].
### `publish:site`
Hiển thị thông tin trang Publish (slug, URL).
### `publish:list`
Liệt kê tệp đã xuất bản.
```bash
total # trả về số lượng tệp đã xuất bản
```
### `publish:status`
Liệt kê các thay đổi Publish.
```bash
total # trả về số lượng thay đổi
new # chỉ hiển thị tệp mới
changed # chỉ hiển thị tệp đã thay đổi
deleted # chỉ hiển thị tệp đã xóa
```
### `publish:add`
Xuất bản tệp hoặc tất cả tệp đã thay đổi (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
changed # xuất bản tất cả tệp đã thay đổi
```
### `publish:remove`
Gỡ xuất bản tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
### `publish:open`
Mở tệp trên trang đã xuất bản (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
## Ghi chú ngẫu nhiên
Lệnh cho [[Ghi chú ngẫu nhiên]].
### `random`
Mở ghi chú ngẫu nhiên.
```bash
folder=<path> # giới hạn trong thư mục
newtab # mở trong thẻ mới
```
### `random:read`
Đọc ghi chú ngẫu nhiên (bao gồm đường dẫn).
```bash
folder=<path> # giới hạn trong thư mục
```
## Tìm kiếm
Lệnh cho [[Tìm kiếm]].
### `search`
Tìm kiếm văn bản trong kho. Trả về đường dẫn tệp khớp.
```bash
query=<text> # (bắt buộc) truy vấn tìm kiếm
path=<folder> # giới hạn trong thư mục
limit=<n> # số tệp tối đa
format=text|json # định dạng đầu ra (mặc định: text)
total # trả về số kết quả khớp
case # phân biệt chữ hoa/thường
```
### `search:context`
Tìm kiếm với ngữ cảnh dòng khớp. Trả về đầu ra kiểu grep `path:line: text`.
```bash
query=<text> # (bắt buộc) truy vấn tìm kiếm
path=<folder> # giới hạn trong thư mục
limit=<n> # số tệp tối đa
format=text|json # định dạng đầu ra (mặc định: text)
case # phân biệt chữ hoa/thường
```
### `search:open`
Mở chế độ xem tìm kiếm.
```bash
query=<text> # truy vấn tìm kiếm ban đầu
```
## Sync
Lệnh cho [[Giới thiệu về Obsidian Sync|Obsidian Sync]].
> [!tip] Đồng bộ hóa mà không cần ứng dụng desktop
> Các lệnh này điều khiển Sync trong ứng dụng Obsidian đang chạy. Để đồng bộ hóa kho từ dòng lệnh mà không cần ứng dụng desktop, xem [[Đồng bộ hóa không giao diện]].
### `sync`
Tạm dừng hoặc tiếp tục đồng bộ hóa.
```bash
on # tiếp tục đồng bộ hóa
off # tạm dừng đồng bộ hóa
```
### `sync:status`
Hiển thị trạng thái và mức sử dụng đồng bộ hóa.
### `sync:history`
Liệt kê lịch sử phiên bản đồng bộ hóa cho tệp (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
total # trả về số lượng phiên bản
```
### `sync:read`
Đọc một phiên bản đồng bộ hóa (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
version=<n> # (bắt buộc) số phiên bản
```
### `sync:restore`
Khôi phục một phiên bản đồng bộ hóa (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
version=<n> # (bắt buộc) số phiên bản
```
### `sync:open`
Mở lịch sử đồng bộ hóa (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
```
### `sync:deleted`
Liệt kê tệp đã xóa trong đồng bộ hóa.
```bash
total # trả về số lượng tệp đã xóa
```
## Thẻ
Lệnh cho [[Thẻ]].
### `tags`
Liệt kê thẻ trong kho. Sử dụng `active` hoặc `file`/`path` để hiển thị thẻ cho một tệp cụ thể.
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
sort=count # sắp xếp theo số lượng (mặc định: name)
total # trả về số lượng thẻ
counts # bao gồm số lượng thẻ
format=json|tsv|csv # định dạng đầu ra (mặc định: tsv)
active # hiển thị thẻ cho tệp đang hoạt động
```
### `tag`
Lấy thông tin thẻ.
```bash
name=<tag> # (bắt buộc) tên thẻ
total # trả về số lần xuất hiện
verbose # bao gồm danh sách tệp và số lượng
```
## Tác vụ
Lệnh cho quản lý tác vụ.
### `tasks`
Liệt kê tác vụ trong kho. Sử dụng `active` hoặc `file`/`path` để hiển thị tác vụ cho một tệp cụ thể.
```bash
file=<name> # lọc theo tên tệp
path=<path> # lọc theo đường dẫn tệp
status="<char>" # lọc theo ký tự trạng thái
total # trả về số lượng tác vụ
done # hiển thị tác vụ đã hoàn thành
todo # hiển thị tác vụ chưa hoàn thành
verbose # nhóm theo tệp với số dòng
format=json|tsv|csv # định dạng đầu ra (mặc định: text)
active # hiển thị tác vụ cho tệp đang hoạt động
daily # hiển thị tác vụ từ ghi chú hàng ngày
```
**Ví dụ:**
```bash
# Liệt kê tất cả tác vụ trong kho
tasks
# Liệt kê tác vụ chưa hoàn thành trong kho
tasks todo
# Liệt kê tác vụ đã hoàn thành từ tệp cụ thể
tasks file=Recipe done
# Liệt kê tác vụ từ ghi chú hàng ngày hôm nay
tasks daily
# Đếm tác vụ trong ghi chú hàng ngày
tasks daily total
# Liệt kê tác vụ với đường dẫn tệp và số dòng
tasks verbose
# Lọc theo trạng thái tùy chỉnh (đặt ký tự đặc biệt trong ngoặc kép)
tasks 'status=?'
```
### `task`
Hiển thị hoặc cập nhật một tác vụ.
```bash
ref=<path:line> # tham chiếu tác vụ (path:line)
file=<name> # tên tệp
path=<path> # đường dẫn tệp
line=<n> # số dòng
status="<char>" # đặt ký tự trạng thái
toggle # chuyển đổi trạng thái tác vụ
daily # ghi chú hàng ngày
done # đánh dấu hoàn thành
todo # đánh dấu chưa hoàn thành
```
**Ví dụ:**
```bash
# Hiển thị thông tin tác vụ
task file=Recipe line=8
task ref="Recipe.md:8"
# Chuyển đổi trạng thái hoàn thành tác vụ
task ref="Recipe.md:8" toggle
# Chuyển đổi tác vụ trong ghi chú hàng ngày
task daily line=3 toggle
# Đặt trạng thái tác vụ
task file=Recipe line=8 done # → [x]
task file=Recipe line=8 todo # → [ ]
task file=Recipe line=8 status=- # → [-]
task daily line=3 done # Đánh dấu tác vụ ghi chú hàng ngày hoàn thành
```
## Mẫu
Lệnh cho [[Mẫu]].
### `templates`
Liệt kê mẫu.
```bash
total # trả về số lượng mẫu
```
### `template:read`
Đọc nội dung mẫu.
```bash
name=<template> # (bắt buộc) tên mẫu
title=<title> # tiêu đề để phân giải biến
resolve # phân giải biến mẫu
```
### `template:insert`
Chèn mẫu vào tệp đang hoạt động.
```bash
name=<template> # (bắt buộc) tên mẫu
```
**Ghi chú:**
- Tùy chọn `resolve` xử lý các biến `{{date}}`, `{{time}}`, `{{title}}`
- Sử dụng `create path=<path> template=<name>` để tạo tệp với mẫu
## Chủ đề và đoạn trích
Lệnh cho [[Chủ đề]] và [[Mẩu CSS]].
### `themes`
Liệt kê chủ đề đã cài đặt.
```bash
versions # bao gồm số phiên bản
```
### `theme`
Hiển thị chủ đề đang hoạt động hoặc lấy thông tin.
```bash
name=<name> # tên chủ đề để xem chi tiết
```
### `theme:set`
Đặt chủ đề đang hoạt động.
```bash
name=<name> # (bắt buộc) tên chủ đề (để trống cho mặc định)
```
### `theme:install`
Cài đặt chủ đề cộng đồng.
```bash
name=<name> # (bắt buộc) tên chủ đề
enable # kích hoạt sau khi cài đặt
```
### `theme:uninstall`
Gỡ bỏ cài đặt chủ đề.
```bash
name=<name> # (bắt buộc) tên chủ đề
```
### `snippets`
Liệt kê mẩu CSS đã cài đặt.
### `snippets:enabled`
Liệt kê mẩu CSS đã bật.
### `snippet:enable`
Kích hoạt mẩu CSS.
```bash
name=<name> # (bắt buộc) tên đoạn trích
```
### `snippet:disable`
Vô hiệu hóa mẩu CSS.
```bash
name=<name> # (bắt buộc) tên đoạn trích
```
## Ghi chú duy nhất
Lệnh cho [[Tạo ghi chú duy nhất]].
### `unique`
Tạo ghi chú duy nhất.
```bash
name=<text> # tên ghi chú
content=<text> # nội dung ban đầu
paneType=tab|split|window # loại panel để mở
open # mở tệp sau khi tạo
```
## Kho
### `vault`
Hiển thị thông tin kho.
```bash
info=name|path|files|folders|size # chỉ trả về thông tin cụ thể
```
### `vaults`
Liệt kê các kho đã biết.
```bash
total # trả về số lượng kho
verbose # bao gồm đường dẫn kho
```
### `vault:open`
Chuyển sang kho khác (chỉ TUI).
```bash
name=<name> # (bắt buộc) tên kho
```
## Trình xem web
Lệnh cho [[Trình xem web]].
### `web`
Mở URL trong trình xem web.
```bash
url=<url> # (bắt buộc) URL cần mở
newtab # mở trong thẻ mới
```
## Đếm từ
Lệnh cho [[Số từ]].
### `wordcount`
Đếm từ và ký tự (mặc định: tệp đang hoạt động).
```bash
file=<name> # tên tệp
path=<path> # đường dẫn tệp
words # chỉ trả về số từ
characters # chỉ trả về số ký tự
```
## Không gian làm việc
Lệnh cho [[Không gian làm việc]] và plugin [[Khung làm việc]].
### `workspace`
Hiển thị cây không gian làm việc.
```bash
ids # bao gồm ID mục không gian làm việc
```
### `workspaces`
Liệt kê không gian làm việc đã lưu.
```bash
total # trả về số lượng không gian làm việc
```
### `workspace:save`
Lưu bố cục hiện tại thành không gian làm việc.
```bash
name=<name> # tên không gian làm việc
```
### `workspace:load`
Tải không gian làm việc đã lưu.
```bash
name=<name> # (bắt buộc) tên không gian làm việc
```
### `workspace:delete`
Xóa không gian làm việc đã lưu.
```bash
name=<name> # (bắt buộc) tên không gian làm việc
```
### `tabs`
Liệt kê thẻ đang mở.
```bash
ids # bao gồm ID thẻ
```
### `tab:open`
Mở thẻ mới.
```bash
group=<id> # ID nhóm thẻ
file=<path> # tệp cần mở
view=<type> # loại chế độ xem cần mở
```
### `recents`
Liệt kê tệp đã mở gần đây.
```bash
total # trả về số lượng tệp gần đây
```
## Lệnh dành cho nhà phát triển
Lệnh giúp bạn phát triển [[Phần mở rộng từ cộng đồng]] và [[Chủ đề]]. Tìm hiểu thêm tại [Tài liệu dành cho nhà phát triển Obsidian](https://docs.obsidian.md).
### `devtools`
Bật/tắt công cụ phát triển Electron.
### `dev:debug`
Gắn/gỡ trình gỡ lỗi Chrome DevTools Protocol.
```bash
on # gắn trình gỡ lỗi
off # gỡ trình gỡ lỗi
```
### `dev:cdp`
Chạy lệnh Chrome DevTools Protocol.
```bash
method=<CDP.method> # (bắt buộc) phương thức CDP cần gọi
params=<json> # tham số phương thức dạng JSON
```
### `dev:errors`
Hiển thị lỗi JavaScript đã bắt được.
```bash
clear # xóa bộ đệm lỗi
```
### `dev:screenshot`
Chụp ảnh màn hình (trả về PNG dạng base64).
```bash
path=<filename> # đường dẫn tệp đầu ra
```
### `dev:console`
Hiển thị thông báo console đã bắt được.
```bash
limit=<n> # số thông báo tối đa (mặc định 50)
level=log|warn|error|info|debug # lọc theo mức log
clear # xóa bộ đệm console
```
### `dev:css`
Kiểm tra CSS với vị trí nguồn.
```bash
selector=<css> # (bắt buộc) bộ chọn CSS
prop=<name> # lọc theo tên thuộc tính
```
### `dev:dom`
Truy vấn phần tử DOM.
```bash
selector=<css> # (bắt buộc) bộ chọn CSS
attr=<name> # lấy giá trị thuộc tính
css=<prop> # lấy giá trị thuộc tính CSS
total # trả về số lượng phần tử
text # trả về nội dung văn bản
inner # trả về innerHTML thay vì outerHTML
all # trả về tất cả kết quả khớp thay vì chỉ kết quả đầu tiên
```
### `dev:mobile`
Bật/tắt giả lập di động.
```bash
on # bật giả lập di động
off # tắt giả lập di động
```
### `eval`
Thực thi JavaScript và trả về kết quả.
```bash
code=<javascript> # (bắt buộc) mã JavaScript cần thực thi
```
## Phím tắt
Các phím tắt này có sẵn trong [[#Sử dụng giao diện terminal|TUI]].
### Điều hướng
| Hành động | Phím tắt |
| ------------------------------------------------------------ | --------------- |
| Di chuyển con trỏ sang trái | `←` / `Ctrl+B` |
| Di chuyển con trỏ sang phải (chấp nhận gợi ý ở cuối dòng) | `→` / `Ctrl+F` |
| Nhảy đến đầu dòng | `Ctrl+A` |
| Nhảy đến cuối dòng | `Ctrl+E` |
| Lùi một từ | `Alt+B` |
| Tiến một từ | `Alt+F` |
### Chỉnh sửa
| Hành động | Phím tắt |
| ------------------------ | --------------------------- |
| Xóa đến đầu dòng | `Ctrl+U` |
| Xóa đến cuối dòng | `Ctrl+K` |
| Xóa từ phía trước | `Ctrl+W` / `Alt+Backspace` |
### Tự động hoàn tất
| Hành động | Phím tắt |
| ----------------------------------------------------------- | ------------ |
| Vào chế độ gợi ý / chấp nhận gợi ý đã chọn | `Tab` |
| Thoát chế độ gợi ý | `Shift+Tab` |
| Vào chế độ gợi ý (từ đầu vào mới) | `↓` |
| Chấp nhận gợi ý đầu tiên/đã chọn (ở cuối dòng) | `→` |
### Lịch sử
| Hành động | Phím tắt |
| --------------------------------------------------------------------- | --------------- |
| Mục lịch sử trước / điều hướng gợi ý lên | `↑` / `Ctrl+P` |
| Mục lịch sử tiếp / điều hướng gợi ý xuống | `↓` / `Ctrl+N` |
| Tìm kiếm lịch sử ngược (nhập để lọc, `Ctrl+R` để chuyển tiếp) | `Ctrl+R` |
### Khác
| Hành động | Phím tắt |
| --------------------------------------------------------------- | --------------------- |
| Thực thi lệnh hoặc chấp nhận gợi ý | `Enter` |
| Hoàn tác tự động hoàn tất / thoát chế độ gợi ý / xóa đầu vào | `Escape` |
| Xóa màn hình | `Ctrl+L` |
| Thoát | `Ctrl+C` / `Ctrl+D` |
## Khắc phục sự cố
Nếu bạn gặp khó khăn khi chạy Obsidian CLI:
- Đảm bảo bạn đang sử dụng [[Cập nhật Obsidian|phiên bản trình cài đặt Obsidian]] mới nhất (1.12.7 trở lên).
- Nếu bạn vừa cập nhật Obsidian từ phiên bản cũ hơn, hãy tắt cài đặt CLI và bật lại, sau đó cho phép Obsidian thực hiện đăng ký PATH tự động.
- Khởi động lại terminal sau khi đăng ký CLI để thay đổi PATH có hiệu lực.
- Obsidian phải đang chạy. CLI kết nối đến phiên bản Obsidian đang chạy.
### Windows
Obsidian CLI trên Windows yêu cầu trình cài đặt Obsidian 1.12.7+. Xem [[Cập nhật Obsidian|Cập nhật phiên bản trình cài đặt]].
Windows sử dụng trình chuyển hướng terminal kết nối Obsidian với stdin/stdout đúng cách. Điều này là cần thiết vì Obsidian thường chạy như ứng dụng GUI, không tương thích với đầu ra terminal trên Windows. Khi bạn cài đặt Obsidian 1.12.7+, trình chuyển hướng terminal `Obsidian.com` sẽ được thêm vào thư mục nơi bạn cài đặt tệp `Obsidian.exe`.
Việc đăng ký CLI thêm Obsidian vào biến PATH của người dùng, chỉ có hiệu lực sau khi bạn khởi động lại terminal.
### macOS
Việc đăng ký CLI tạo liên kết tượng trưng tại `/usr/local/bin/obsidian` trỏ đến nhị phân CLI được đóng gói bên trong ứng dụng. Điều này yêu cầu quyền quản trị — bạn sẽ được nhắc qua hộp thoại hệ thống.
Kiểm tra liên kết tượng trưng tồn tại và trỏ đến nhị phân đúng:
```
ls -l /usr/local/bin/obsidian
```
Nếu liên kết tượng trưng bị thiếu, tạo thủ công:
```
sudo ln -sf /Applications/Obsidian.app/Contents/MacOS/obsidian-cli /usr/local/bin/obsidian
```
> [!note] Nếu trước đây bạn đã đăng ký CLI với phiên bản Obsidian cũ hơn, bạn có thể có mục PATH còn sót lại trong `~/.zprofile`. Quy trình đăng ký mới sẽ tự động xóa mục này, nhưng nếu nó vẫn còn, bạn có thể an toàn xóa các dòng bắt đầu bằng `# Added by Obsidian` khỏi `~/.zprofile`.
### Linux
Việc đăng ký CLI sao chép nhị phân CLI vào `~/.local/bin/obsidian`. Điều này được thực hiện vì một số phương thức cài đặt Linux chạy từ các thư mục tạm thời không thể tạo liên kết tượng trưng bền vững.
Đảm bảo `~/.local/bin` nằm trong PATH. Thêm dòng sau vào `~/.bashrc` hoặc `~/.zshrc` nếu chưa có:
```
export PATH="$PATH:$HOME/.local/bin"
```
Kiểm tra nhị phân tồn tại:
```
ls -l ~/.local/bin/obsidian
```
Nếu nhị phân bị thiếu, sao chép thủ công từ thư mục cài đặt Obsidian:
```
cp /path/to/Obsidian/obsidian-cli ~/.local/bin/obsidian
chmod 755 ~/.local/bin/obsidian
```