### Замена старых шаблонов на YAML + встроенные обратные ссылки
> [!warning] Сделай резервную копию
> Перед любыми массовыми изменениями **обязательно** сделай копию своего хранилища Obsidian. Даже если всё работает идеально — ошибки случаются. Также для минимизации риска - рекомендую ручной способ.
---
## 🎯 Что мы хотим заменить?
Раньше заметки начинались вот так:
>[!quote] Шаблон для связей, который у меня сейчас:
>![[Pasted image 20250526132559.png]]
````
%%Input links:
Tags: #тег
Date: {{date}}
Output links:
```dataview
list from [[{{title}}]]
%%
````
Такой формат:
- не читается плагином Dataview
- мешает структуре заметки
- требует ручного редактирования
Мы хотим перейти на YAML:
>[!quote] Как выглядит шаблон YAML:
>![[Pasted image 20250526132739.png]]
А так выглядит YAML в виде исходного кода:
```
---
input links:
- '[[ПСИХОЛОГИЯ]]'
tags:
- психология
- blog
date: 24-05-2025
---
````
А отображение обратных ссылок можно перенести в начало заметки. Каким образом? Давайте рассмотрим ниже.
---
#### 🔗Обратные ссылки — встроенная функция от Obsidian
Вместо `Output links` с кодом `[[Dataview]]`, теперь мы используем:
- **встроенные обратные ссылки** (включаются в настройках)
>[!quote] Как выглядят "Обратные ссылки":
>![[Pasted image 20250526133743.png]]
![[01.png]]
---
## 🎨 Как переместить обратные ссылки вверх, рядом с YAML, с помощью CSS
1. Открываем папку с CSS-сниппетами:
>[!quote] Папка CSS-сниппеты:
>![[Pasted image 20250526134931.png]]
2. Создаем CSS-документ (для начала создаем обычный блокнот -> "Сохранить как" -> "Все форматы" -> просто дописываем в названии файла .css -> например backlinks.css)
3. Добавь этот код в `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;
}
```
>[!quote] Как выглядит код в блокноте (css):
>![[Pasted image 20250526135130.png]]
>
>[!quote] 👉 Теперь обратные ссылки будут сразу под YAML-блоком. Это удобно для быстрого просмотра связей.
>![[02.png]]
---
## 🔁 3 способа перехода на YAML
### 1. 🐍 Python-скрипт (для опытных)
```
# Смотри ниже — обязательно замени путь к Vault (Vault_Path) и проверь шаблон поиска
```
> [!danger] Внимание! Этот метод массово заменяет текст. Не запускай, если не уверен. Лучше проконсультируйся с ChatGPT перед запуском.
#### Вот сам код:
```
import os
import re
VAULT_PATH = r"C:\delete after\Tutorial 01"
# Гибкая регулярка: допускает необязательные пробелы, переносы и отсутствие некоторых полей
pattern = re.compile(
r"(?:%%)?\s*\*\*Input links\*\*:\s*(.*?)"
r"\n\s*\*\*Tags\*\*:\s*#?(.*?)"
r"(?:\n\s*\*\*Date\*\*:\s*(.*?))?"
r"\n\s*\*\*Output links\*\*:\s*```dataview\s*\nlist from \[\[(.*?)\]\]\s*\n```"
r"\n___\s*(?:%%)?",
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()
```
> [!tip] Как адаптировать под себя?
>
> 1. Замени `VAULT_PATH` на путь к своему хранилищу
>
> 2. Покажи этот код ChatGPT и напиши: «`Помоги адаптировать под мои шаблоны. Вот пример заметки`...»
>
---
### 2. 🔍 Плагин Global Search and Replace
Подходит для шаблонных строк. Например:
- Найди: `%%Input links:`
- Замени на: `---\ninput links:`
Если шаблон стабилен — работает надёжно. Но смотри на отступы YAML!
---
### 3. ✍️ Ручной перенос (рекомендуется)
Лучше всё сделать вручную в 5–10 ключевых шаблонах, а потом использовать их как основу.
> [!example] Рекомендуемый подход:
>
> - Создай шаблон YAML для разных типов заметок (книга, идея, проект)
>
> - Удали старый блок `%%...%%`
>
> - Включи обратные ссылки и используй CSS, чтобы они были вверху
>
---
## 📌 Заключение
> [!success] Переход на YAML — это про порядок Ты избавляешься от ручного кода, используешь встроенные возможности Obsidian и наводишь чистоту в своей системе.
Хочешь пример адаптации под свой Vault? Напиши ChatGPT:
> «Вот как выглядел мой старый шаблон. Помоги переделать его в YAML и объясни, какие строки можно вставить вручную.»
---
> [!abstract] Идем дальше?
> - 🧠 [[YAML|Вернуться назад в YAML]]
> - [[Главная страница|⬅️ Назад на главную]]