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이 시작돼요.
>
> 데스크톱 앱 없이 동기화하고 싶으신가요? [[헤드리스 Sync|Obsidian Headless]]를 참조하세요.
### 명령어 실행
TUI를 열지 않고 개별 명령어를 실행해요:
```shell
# 도움말 명령어 실행
obsidian help
```
### 터미널 인터페이스 사용
`obsidian`을 입력하여 TUI를 사용해요. 이후 명령어는 `obsidian` 없이 입력할 수 있어요.
```shell
# TUI를 열고 도움말 실행
obsidian
help
```
TUI는 자동 완성, 명령어 기록, 역방향 검색을 지원해요. `Ctrl+R`을 사용하여 명령어 기록을 검색하세요. 사용 가능한 모든 단축키는 [[#키보드 단축키]]를 참조하세요.
## 예제
다음은 Obsidian CLI로 할 수 있는 몇 가지 예제예요.
### 일상적인 사용
```shell
# 오늘의 일일 노트 열기
obsidian daily
# 일일 노트에 할 일 추가
obsidian daily:append content="- [ ] 장보기"
# 보관함 검색
obsidian search query="회의 노트"
# 활성 파일 읽기
obsidian read
# 일일 노트의 모든 할 일 목록 표시
obsidian tasks daily
# 템플릿으로 새 노트 만들기
obsidian create name="파리 여행" 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="# 제목\n\n본문 텍스트"
```
### 보관함 지정
터미널의 현재 작업 디렉터리가 보관함 폴더인 경우 해당 보관함이 기본으로 사용돼요. 그렇지 않으면 현재 활성 보관함이 사용돼요.
`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>`은 [[내부 링크|위키 링크]]와 동일한 링크 해석을 사용하여 파일을 찾으며, 전체 경로나 확장자 없이 파일 이름으로 매칭해요.
- `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`
보관함의 모든 `.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 Sync 소개|Sync]]의 버전을 나열하거나 비교해요. 버전은 최신순에서 오래된순으로 번호가 매겨져요.
```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
# Sync 버전만 표시
diff filter=sync
```
### `history`
[[파일 복원]]의 버전만 나열해요. Sync 관련 명령어는 [[#Sync|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> # 파일 경로
```
## Publish
[[Obsidian Publish 소개|Obsidian Publish]] 관련 명령어예요.
### `publish:site`
게재 사이트 정보를 표시해요 (슬러그, 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> # 초기 검색 쿼리
```
## Sync
[[Obsidian Sync 소개|Obsidian Sync]] 관련 명령어예요.
> [!tip] 데스크톱 앱 없이 동기화
> 이 명령어들은 실행 중인 Obsidian 앱 내에서 Sync를 제어해요. 데스크톱 앱 없이 명령줄에서 보관함을 동기화하려면 [[헤드리스 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> # 작업 참조 (경로:줄)
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 # outerHTML 대신 innerHTML 반환
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이 일반적으로 Windows에서 터미널 출력과 호환되지 않는 GUI 앱으로 실행되기 때문에 필요해요. Obsidian 1.12.4+를 설치하면 `Obsidian.exe` 파일이 설치된 폴더에 `Obsidian.com` 터미널 리다이렉터가 추가돼요.
### macOS
CLI 등록은 `~/.zprofile`을 통해 Obsidian 바이너리 디렉터리를 PATH에 추가해요. 문제가 있는 경우 다음을 확인하세요:
`~/.zprofile` 파일에 다음 줄이 포함되어 있어야 해요. 누락된 경우 수동으로 추가할 수 있어요:
```
export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"
```
#### 대체 셸
CLI 등록은 zsh(macOS 기본 셸)에서 사용하는 `~/.zprofile`만 수정해요. 다른 셸을 사용하는 경우, 셸 설정 파일에 Obsidian 바이너리 디렉터리를 수동으로 추가하세요:
- Bash: `~/.bash_profile`에 `export PATH="$PATH:/Applications/Obsidian.app/Contents/MacOS"` 추가
- Fish: `fish_add_path /Applications/Obsidian.app/Contents/MacOS` 실행
### Linux
CLI 등록은 Obsidian 바이너리를 가리키는 심볼릭 링크를 `/usr/local/bin/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 패키지는 자체 사용자 데이터 디렉터리에 Insider 빌드 데이터를 저장해요. CLI가 Insider `.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
```