Сделай резервную копию

Перед любыми массовыми изменениями обязательно сделай копию своего хранилища Obsidian. Даже если всё работает идеально — ошибки случаются. Также для минимизации риска - рекомендую ручной способ.


🎯 Что мы хотим заменить?

Раньше заметки начинались вот так:

Шаблон для связей, который у меня сейчас:

Такой формат:

  • не читается плагином Dataview
  • мешает структуре заметки
  • требует ручного редактирования

Мы хотим перейти на YAML:

Как выглядит шаблон YAML:

А так выглядит YAML в виде исходного кода:

---
input links:
  - '[[ПСИХОЛОГИЯ]]'
tags:
  - психология
  - blog
date: 24-05-2025
---

А отображение обратных ссылок можно перенести в начало заметки. Каким образом? Давайте рассмотрим ниже.


🔗Обратные ссылки — встроенная функция от Obsidian

Вместо Output links с кодом [[Dataview]], теперь мы используем:

  • встроенные обратные ссылки (включаются в настройках)

Как выглядят "Обратные ссылки":


🎨 Как переместить обратные ссылки вверх, рядом с YAML, с помощью CSS

  1. Открываем папку с CSS-сниппетами:

Папка CSS-сниппеты:

  1. Создаем CSS-документ (для начала создаем обычный блокнот “Сохранить как” “Все форматы” просто дописываем в названии файла .css например backlinks.css)

  2. Добавь этот код в publish.css или obsidian.css:

.cm-sizer {
  display: flex;
  flex-direction: column;
}

.inline-title {
  order: 1;
}

.metadata-container {
  order: 2;
}

.embedded-backlinks {
  order: 3;
  position: static;
  overflow-y: auto;
  max-height: 300px;
}

.cm-contentContainer {
  order: 4;
}

Как выглядит код в блокноте (css):

👉 Теперь обратные ссылки будут сразу под YAML-блоком. Это удобно для быстрого просмотра связей.


🔁 3 способа перехода на YAML

1. 🐍 Python-скрипт (для опытных)

# Смотри ниже — обязательно замени путь к Vault (Vault_Path) и проверь шаблон поиска

Внимание! Этот метод массово заменяет текст. Не запускай, если не уверен. Лучше проконсультируйся с ChatGPT перед запуском.

Вот сам код:

import os
import re

VAULT_PATH = r"C:\delete after\Tutorial 01"

# Гибкая регулярка: допускает необязательные пробелы, переносы и отсутствие некоторых полей
pattern = re.compile(
    r"(?:)?",
    re.DOTALL
)

def convert_file(filepath):
    with open(filepath, "r", encoding="utf-8") as f:
        content = f.read()

    if content.strip().startswith("---"):
        return False

    match = pattern.search(content)
    if not match:
        return False

    input_raw = match.group(1).strip()
    tags_raw = match.group(2).strip()
    date = match.group(3).strip() if match.group(3) else None

    # Форматирование ссылок: '[[...]]'
    input_links = re.findall(r"\[\[(.*?)\]\]", input_raw)
    input_yaml = "\n".join([f"  - '[[{link.strip()}]]'" for link in input_links])

    # Форматирование тегов
    tags = [tag.strip("# ").strip() for tag in tags_raw.split()]
    tags_yaml = "\n".join([f"  - {tag}" for tag in tags]) if tags else "  - "

    # Формируем YAML
    yaml = [
        "---",
        "input links:",
        input_yaml if input_yaml else "  - ",
        "tags:",
        tags_yaml,
    ]
    if date:
        yaml.append(f"date: {date}")
    yaml.append("---")

    # Удаляем весь старый блок и добавляем YAML
    new_content = "\n".join(yaml) + "\n\n" + content[match.end():].lstrip()

    with open(filepath, "w", encoding="utf-8") as f:
        f.write(new_content)

    print(f"✅ Обновлено: {filepath}")
    return True

def process_vault():
    print("🚀 Запускаю обработку...")
    count = 0
    for root, _, files in os.walk(VAULT_PATH):
        for file in files:
            if file.endswith(".md"):
                full_path = os.path.join(root, file)
                if convert_file(full_path):
                    count += 1
    print(f"🎉 Готово! Обновлено файлов: {count}")

if __name__ == "__main__":
    process_vault()
    

Как адаптировать под себя?

  1. Замени VAULT_PATH на путь к своему хранилищу

  2. Покажи этот код ChatGPT и напиши: «Помоги адаптировать под мои шаблоны. Вот пример заметки…»


2. 🔍 Плагин Global Search and Replace

Подходит для шаблонных строк. Например:

  • Найди: ...%%
  • Включи обратные ссылки и используй CSS, чтобы они были вверху

📌 Заключение

Переход на YAML — это про порядок Ты избавляешься от ручного кода, используешь встроенные возможности Obsidian и наводишь чистоту в своей системе.

Хочешь пример адаптации под свой Vault? Напиши ChatGPT:

«Вот как выглядел мой старый шаблон. Помоги переделать его в YAML и объясни, какие строки можно вставить вручную.»


Идем дальше?