문서 가이드 문법

문법

Mihomo는 YAML을 설정 파일 형식으로 사용합니다. 여기서는 설정을 작성할 때 사용되는 몇 가지 문법 규칙을 정리했습니다. 주석, 객체/배열, 앵커 참조, 도메인 와일드카드, 포트 범위 작성법을 포함합니다.

기본 규칙

YAML은 대소문자를 구분하며, 들여쓰기로 계층 관계를 표현합니다. 들여쓰기는 공백만 사용할 수 있고 탭은 사용할 수 없습니다. 정확히 몇 개의 공백을 쓰는지는 중요하지 않으며, 같은 레벨의 항목이 왼쪽으로 정렬되어 있으면 됩니다.

에디터에서 "들여쓰기가 맞지 않는데 보기엔 맞는" 오류가 나타난다면, 십중팔구 탭 문자가 실수로 섞여 들어간 경우입니다. 들여쓰기 방식을 확인해보세요.

주석

#로 시작해 줄 끝까지가 주석입니다. # 앞은 반드시 줄의 시작이거나 공백이 있어야 하며, 그렇지 않으면 주석으로 인식되지 않습니다(예를 들어 URL에 포함된 #은 영향을 받지 않습니다).

config.yaml YAML
port: 7890 # http 프록시 포트
socks-port: 7891
# socks 프록시 포트

객체와 배열

객체는 key: value로 표현하며, 콜론 뒤에 공백을 하나 추가해야 합니다. YAML은 JSON의 상위 집합이므로 JSON 스타일 문법도 바로 사용할 수 있으며, 다음 네 가지 작성법은 완전히 동등합니다:

여러 줄 작성법(가장 흔함)
YAML 여러 줄
tun:
  enable: true
  stack: system
  auto-route: true
  auto-detect-interface: true
한 줄 JSON 작성법
YAML 한 줄
tun: { enable: true, stack: system, auto-route: true, auto-detect-interface: true }

배열은 -로 시작하는 줄로 표현하며, 한 줄 JSON 작성법 a: [b, c, d]도 지원하고 여러 줄 배열과 동등합니다:

YAML 배열
a:
  - b
  - c
  - d

앵커와 참조

&는 설정의 한 부분에 앵커를 붙이는 데 사용하고, *는 이 앵커를 참조하는 데 사용하며, <<는 앵커 내용을 현재 객체에 병합한다는 의미입니다. 여러 프록시 프로바이더나 규칙 프로바이더를 작성할 때 공통 필드를 한 번만 작성하고 앵커로 재사용하면 중복 코드를 많이 줄일 수 있습니다.

config.yaml YAML
p: &p
  type: http
  interval: 3600
  health-check:
    enable: true
    url: https://www.gstatic.com/generate_204
    interval: 300

proxy-providers:
  provider1:
    <<: *p
    url: ""
    path: ./proxy_providers/provider1.yaml

  provider2:
    <<: *p
    type: file
    path: ./proxy_providers/provider2.yaml

위 내용은 p 앵커의 내용을 provider1과 provider2에 각각 복사해 넣은 것과 동등합니다. 병합 시 중복된 필드가 있으면(예: provider2에서 type을 다시 작성한 경우) 직접 작성한 값이 우선하며 앵커에 의해 덮어써지지 않습니다. 또한 p라는 키 이름 자체는 mihomo에서 유효한 필드가 아니며 앵커를 담아두는 용도일 뿐이므로 해석 시 무시됩니다.

도메인 와일드카드

여기서 말하는 와일드카드는 fake-ip-filter, nameserver-policy 등의 필드에 전용으로 사용되며, 라우팅 규칙의 DOMAIN-WILDCARD와는 다른 것으로 두 문법은 서로 호환되지 않습니다.

와일드카드매칭 범위예시
*1단계 도메인만 매칭*.baidu.com은 tieba.baidu.com과 매칭되지만 123.tieba.baidu.com이나 baidu.com과는 매칭되지 않습니다
+여러 단계를 모두 매칭(접두사 작성법, DOMAIN-SUFFIX와 유사)+.baidu.com은 baidu.com, tieba.baidu.com, 123.tieba.baidu.com을 모두 매칭합니다
.여러 단계를 모두 매칭하지만 순수 도메인 자체는 포함하지 않음.baidu.com은 tieba.baidu.com과 매칭되지만 baidu.com과는 매칭되지 않습니다

와일드카드를 사용할 때는 YAML이 다른 유형으로 해석하지 않도록 인용 부호로 감싸는 것을 권장합니다:

config.yaml YAML
fake-ip-filter:
  - ".lan"
  - "xbox.*.microsoft.com"
  - "+.xboxlive.com"
  - localhost.ptlogin2.qq.com

도메인 세트 가져오기

일부 필드(예: fake-ip-filter)는 rule-set이나 geosite 세트를 바로 가져오는 것을 지원하며, 작성법은 유형:세트이름입니다:

여기서의 rule-set은 behavior가 domain / classical인 규칙 프로바이더만 지원합니다.

config.yaml YAML
fake-ip-filter:
  - "rule-set:xxx"
  - "geosite:xxx"

포트 범위

-로 포트 범위를 표현하고, /나 ,로 여러 포트/포트 범위를 구분하며 혼용해서 작성할 수 있습니다:

예시 Port Range
# 114-514, 810-1919 두 범위와 단독 65530 포트를 매칭
114-514/810-1919,65530