Вам нравится пользоваться GNU Emacs, но вы ещё не используете его для ведения своего Zettelkasten? В статье мы немного поговорим о собственно Zettelkasten, а затем о том, как настроить и использовать Org-roam с этой целью.

Org-roam with graph
Org-roam with graph

На снимке выше вы видите Emacs с двумя связанными друг с другом заметками и визуализацию графа в браузере, в котором выделен узел одной из открытых заметок и все связанные с ним. Интересно? Тогда читайте дальше.

Предисловие

Начать пользоваться Zettelkasten меня вдохновила статья Zettelkasten: как один немецкий учёный стал невероятно продуктивным. Первое время я перебирал различные свободные программы (одна из них). Но так как к тому времени я уже вовсю пользовался GNU Emacs, то нашел для себя Zetteldeft, который базировался на режиме управления заметками Deft. Deft к слову написан Jason Blevins, автором markdown-mode. Ни шатко, ни валко пользовался я Zetteldeft в течение года. А потом на целый год совсем забил.

Возвращению к Zettelkasten поспособствовал интерес к Guix. Это такой дистрибутив GNU/Linux, в котором управление системой написано на Guile. Попались материалы от System Crafters, фанатов Guix, GNU Emacs и Scheme. И у них оказались материалы по ведению Zettelkasten. Так я перешёл на Org-roam. И ниже я расскажу как его настроить и использовать для создания "второго мозга", как выразились System Crafters в одном из своих видео.

Зачем мне Zettelkasten, и как я с ним работаю

Луман использовал свою систему заметок для поиска новых идей для своих книг и статей, но никто не запрещает вам использовать этот подход для чего-то ещё. В отличие от Лумана я не записываю в Zettelkasten никаких своих идей. Тогда для чего мне Zettelkasten?

Zettelkasten как база знаний

Я использую Zettelkasten для формирования своей собственной базы знаний. Изучая что-то и встречая новое или забытое понятие, я заношу его в Zettelkasten. Я всегда пишу название на английском языке, потому что терминология информатики и современной науки приходит к нам из этого языка. Зная как это называется в оригинале, проще обращаться к поисковой системе в Интернете и читать статьи и документацию. К тому же значительная часть, если не большая, терминов всё-равно является адаптированными названиями с английского. Затем я пишу краткое описание понятия или другой текст своими словами. Это важно, так как я хочу, чтобы эта база знаний была синхронизирована со знаниями в моей голове. И делаю это на своём родном языке, потому что думаю я на нём. Я пробовал первое время писать заметки на английском, кое как вымучивал их, и потом всё-равно переписал их на русский.

Кроме заголовка с названием понятия и кратким его описанием, а также метаинформации (автор, дата создания, теги и др.), в большинстве случаев я вставляю раздел под названием Resources. Так как изначально заметки писались на английском, то закрепилось это название, и я не захотел его заменять на русский эквивалент. Это важный раздел, так как в него я заношу ссылки на внешние ресурсы, имеющие отношение к понятию. Чаще всего сюда попадают ссылки на страницы Wikipedia (и на русском, и на английском), а также домашняя страница, репозиторий исходных текстов, статьи в блогах, разделы в документации и т.п. Ссылки на Wikipedia нужны, чтобы можно было прочитать больше подробностей, если это необходимо, и найти другие ресурсы, не упомянутые в этом разделе. В заметке могут быть и другие разделы, но только в Resources могут быть внешние ссылки.

Самый цимус Zettelkasten -- связи между заметками. После того как написано краткое описание и заполнен раздел Resources, я возвращаюсь к тексту описания, чтобы установить связи с другими понятиями. Это очень важный этап, именно связи делают из заметок базу знаний. Иногда в описании встречается понятие, ещё отсутствующее в Zettelkasten. Тогда я могу создать для него заметку и связаться с ней. Так постепенно наполняется моя база знаний.

Заметки не только пишутся, но и читаются. Бывает, я забываю, что означает какое-то понятие. Тогда я могу найти его в Zettelkasten и вспомнить. Также я обращаюсь к заметкам, когда мне надо посмотреть, что в этой области есть ещё. Например, вы знаете, что есть Verilog, но какие ещё есть языки HDL? Если база знаний достаточно наполнена, то ответ вы быстро найдёте даже не обращаясь к поиску в Интернете.

Zettelkasten как хранилище ссылок

Закладки в веб-браузере достаточно удобная вещь, но не совершенная. Вы можете в своей базе ссылок искать по тегам и названиям. Но в этой базе нет связей между записями. Да, есть папки, которые позволяют группировать ссылки по категориям. Но связи в Zettelkasten гибче и дают больше информации. Именно поэтому я всё меньше заношу ссылки в закладки. А вместо этого просто добавляю ещё одну заметку в Zettelkasten.

Если всё же мне понадобится собрать ссылки по какому-то признаку в одном месте, я могу создать заметку по типу "потрясающих списков" (awesome lists). Только ссылки в ней будут на заметки, а не на ресурсы в Интернете.

Я всё ещё пользуюсь закладками, когда работаю в браузере. Когда же работаю в Emacs, мне проще, не отрывая рук от клавиатуры, найти нужное в Zettelkasten и открыть ссылку оттуда, вместо того чтобы искать это в строке браузера и в поисковой выдаче.

Zettelkasten как индикатор моего прогресса

Когда знания только у вас в голове, сложно осознавать, насколько их много, и где находятся пробелы. Используя и анализируя свой Zettelkasten я могу увидеть, какие области охвачены, с какими больше всего работаю, насколько та или иная область проработана. Это видно, когда читаешь и пишешь свои заметки. Но ещё это можно увидеть, визуализировав граф Zettelkasten. Вид графа завораживает. Точно также, как нам нравится смотреть, как растёт наш рейтинг на Codeforces, или заполняется шкала ежедневного вклада на GitHub, так же мне нравится видеть, что мой граф знаний становится больше и сложней.

Настраиваем Org-roam

Я предполагаю, что вы уже пользуетесь Emacs, поэтому не буду начинать с нуля, и сразу перейду к Org-roam.

Для начала установите пакеты Emacs org-roam и org-roam-ui предпочитаемым вами способом.

Затем откройте ваш ~/.emacs.d/init.el и добавьте в него следующие строки:

(use-package org-roam
  :init
  (setq org-roam-v2-ack t)
  :custom
  (org-roam-directory "~/RoamNotes")
  (org-roam-completion-everywhere t)
  (org-roam-capture-templates
   '(("d" "default" plain
      "%?"
      :if-new (file+head
               "%<%Y%m%d%H%M%S>-${slug}.org"
               "#+TITLE: ${title}\n#+AUTHOR: YOUR NAME\n#+LANGUAGE: Russian\n#+LICENSE: CC BY-SA 4.0\n#+DATE: %<%Y-%m-%d>\n#+FILETAGS:\n")
      :unnarrowed t)))
  :bind (("C-c n l" . org-roam-buffer-toggle)
         ("C-c n f" . org-roam-node-find)
         ("C-c n i" . org-roam-node-insert)
         :map org-mode-map
         ("C-M-i" . completion-at-point))
  :config
  (org-roam-setup)
  (org-roam-db-autosync-mode))

(use-package org-roam-ui
  :disabled
  :after org-roam
  :config
  (setq org-roam-ui-sync-theme t
        org-roam-ui-follow t
        org-roam-ui-update-on-save t
        org-roam-ui-open-on-start t))

Исправьте путь к директории, где будет храниться ваш Zettelkasten, в команде org-roam-directory. И замените фразу YOUR NAME на своё имя. Если будете писать заметки на английском языке, замените Russian на English. Также вы можете заменить лицензию на более для вас подходящую. Всё это важно, если будете свой Zettelkasten где-то публиковать.

Перезапустите Emacs и убедитесь, что никаких проблем при его загрузке не произошло.

Работаем с Org-roam

Чтобы создать свою первую заметку нажмите C-c n f. Появится приглашение ко вводу заголовка:

Ввод заголовка новой заметки
Ввод заголовка новой заметки

Напишите заголовок заметки и нажмите Enter:

Первая заметка Something
Первая заметка Something

Напишите текст заметки и нажмите C-c C-c. Теперь заметка в вашем Zettelkasten:

Something готова
Something готова

Закройте заметку как обычно C-x k, а затем нажмите C-c n f:

Поиск заметки Something
Поиск заметки Something

Выберите из списка заметку и откройте её. Добавим в неё связь, выделим текст и нажмём C-c n i:

Добавление связанной заметки
Добавление связанной заметки

Отредактируем заголовок новой заметки и нажмём Enter:

Создание связанной заметки
Создание связанной заметки

После её редактирования нажмём C-c C-c и вернёмся к предыдущей заметке:

Возврат к редактированию Something
Возврат к редактированию Something

Теперь мы можем открыть связанную заметку, поставив курсор на ссылку и нажав C-c C-o:

Открытие связанной заметки
Открытие связанной заметки

В связанной заметке нажмите C-c n l. Отобразится буфер с информацией об обратных ссылках на неё:

Буфер с обратными ссылками
Буфер с обратными ссылками

Обратная ссылка (backlink) это заметка, которая ссылается на текущую. Это очень полезная вещь, так как нам не нужно вручную искусственно создавать обратные связи между заметками. Это далает за нас Org-roam.

Чтобы вернуться назад к заметке, просто нажмите ещё раз C-c n l.

Это собственно всё, что нужно знать, чтобы начать создавать свой Zettelkasten в GNU Emacs. А подробную информацию по настройке и других функциях Org-roam можно найти в документации.

Визуализируем Zettelkasten

Ну и под конец киллер-фича: Org-Roam-UI. Для визуализации графа вызовем команду org-roam-ui-mode и увидим нечто подобное:

Org-Roam-UI
Org-Roam-UI

Этот граф можно двигать, визуально приближать и удалять, выделять узлы и читать заметки, открыв панель справа. А щёлкнув на значёк слева получите доступ к богатым настройкам визуализации. Я не стану приводить здесь какую-либо инструкцию, так как всё достаточно интуитивно понятно.

Если вам понравилась эта статья, не ленитесь поблагодарить автора донатом на Boosty. Ваша поддержка подогревает мой энтузиазм!

Ссылки

(c) Симоненко Евгений, 2025

Комментарии (5)


  1. laminar
    14.02.2025 03:43

    Ждём реализацию под vim )) Для меня самое сложное в зетелькастен это начать пользоваться этой системой, толи цели не те, толи и без него отлично обхожусь.


    1. easimonenko Автор
      14.02.2025 03:43

      Я слишком давно не пользуюсь Vim, поэтому не в курсе, что в нём есть, чего нет. Неужели в Vim не завезли Zettelkasten?


    1. Manrus
      14.02.2025 03:43

      VimWiki


  1. budnikovsergey
    14.02.2025 03:43

    а есть ли какой-то способ порезать большой развесистый org-файл на ноды org-roam не вручную? а то у меня 4 мегабайта набралось и есть подтупливания при правках


    1. domix32
      14.02.2025 03:43

      написать скрипт?