Последние пять лет я практикую Zettelkasten и до сих пор не нашёл ничего лучше, чем метод Никласа Лумана. Проблема в том, что Obsidian из коробки не подходит для этой цели, и мне пришлось написать плагин для организации заметок, максимально близкой к оригинальному методу Лумана.

Я потратил пару недель, копаясь в оригинальном архиве Лумана, прежде чем понял, как он устроен на самом деле. Структурно архив похож на оглавление книги, но с той разницей, что заметку можно вставить в произвольное место, добавляя вложенные главы.

- 9/8
	- 9/8a
		- 9/8a1
		- 9/8a2
	- 9/8b
		- 9/8b1

Каждая заметка выступала одновременно в роли записи и потенциальной папки для дочерних записей. В бумажной базе это достигалось за счёт сложной системы нумерации.

Так мог бы выглядеть архив Лумана в Obsidian
Так мог бы выглядеть архив Лумана в Obsidian

По сути, это аналог современной файловой системы, в том числе использующей символические ссылки. Таким образом, у каждой заметки может быть несколько «родителей».

Чтобы реализовать это в Obsidian, потребовалось создать собственный плагин — VirtFolder.

Схематично ту же структуру можно представить так:

VirtFolder

После установки плагина из встроенного магазина Obsidian нас встречает окно с надписью ROOT. По нему можно сразу кликнуть правой кнопкой мыши и создать пару заметок. Заметки, не имеющие родительской папки, помещаются в виртуальную папку Orphans. Заметки верхнего уровня (имеющие детей, но не имеющие родителя) попадают в папку ROOT.

В последней версии плагина появилось перетаскивание заметок мышкой. Плагином также можно управлять исключительно с клавиатуры. Для этого необходимо назначить горячие клавиши на все доступные команды: перемещение заметки в другую папку, отображение открытой заметки в иерархическом древе и тому подобное.

Физическое расположение заметок на диске не играет роли. Структура опирается на метаданные в YAML. По умолчанию поле Folders содержит ссылку на родительскую запись. Плагин проходит по всем заметкам при запуске приложения, формируя внутреннюю базу данных. При добавлении или удалении заметки база обновляется, и по ней выстраивается отображение.

Решение проблем именования

Obsidian хранит заметки в виде обычных Markdown-файлов на диске. Это удобно, когда нужно обрабатывать их скриптами, но создаёт проблему при совпадении имён. Например, я создаю заметку с именем TODO и прикрепляю её к папке текущего проекта. В какой-то момент я захочу создать заметку с тем же именем для другого проекта, но файл TODO.md уже существует на диске! Для решения этой проблемы VirtFolder поддерживает работу с плагинами Unique note creator и Front Matter Title.

Первый позволяет создавать заметки с уникальными именами из файла-шаблона. Он именует заметки по времени создания, например 202602151803.md, что решает проблему совпадения имён. Второй плагин отображает название записи из поля title в YAML. В древе всё будет отображаться и без него, но удобнее, когда работает поиск заметок по имени.

Настройки

Плагин позволяет настраивать практически всё: имена полей в YAML на любом языке, отображение заголовка по имени файла или из YAML, порядок сортировки заметок в папке, игнорируемые папки (заметки из которых не попадают в общую базу), формат ссылок и запрос подтверждения при удалении файла.

Заключение

Единственная цель моего плагина — помочь таким же людям, как я, организовать приватную базу знаний. Я пробовал множество подходов, но именно этот метод наконец заставил базу «заработать» как было обещано в "рекламе" Zettelkasten.

При других подходах проблемы начинаются, когда число заметок переваливает за пару сотен. Структура VirtFolder позволяет организовать базу из нескольких тысяч записей, не потеряв при этом ни одной из них.

Буду рад услышать критику и предложения.