Temlibro
May 11

Пост 11.05.2025

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

Поэтому я решил сделать его в виде плагина для Vim. Почему Vim? Потому что Vim работает с текстовыми файлами и есть практически в любой операционной системе от древнего Линукса до Макоси и Андроида. К тому же, это очень мощный и гибкий редактор, а Vimscript — относительно несложный язык, позволяющий «наворотить» много разного поверх функций Vim.

Удобней всего для меня оказалось вести заметки в ежедневных файлах, а потом их каким-то образом связывать и агрегировать. Такую систему ведения заметок можно назвать Journal-based note-taking. Для ведения записей я предпочитаю использовать разметку Markdown — по сути это тот же простой текст, только с некоторой несложной разметкой, с помощью которой можно структурировать текст, выделять важное, добавлять ссылки и т.п. Чтобы разделять в ежедневнике заметки, относящиеся к разным темам, я использую заголовки.

Но как потом найти все записи, относящиеся к определенной теме? Надо просто найти все заголовки, в которых записана эта тема! Размышляя таким образом, я пришел к идее сделать специального вида заголовки, которые будут «якорями» для специального же вида ссылок. Такие ссылки по сути являются сохраненными поисковыми запросами. Если находится ровно один заголовок с указанной в ссылке темой, то программа открывает файл и перемещает курсор к найденному заголовку — так работают и обычные ссылки в программах типа Obsidian или VimWiki. Однако, если находится много заголовков с темой, указанной в ссылке, то пользователю выдается список найденных заголовком с предпросмотром — пользователь может пролистать его и перейти к конкретному месту. Таким образом оказалось можно легко находить все записи на конкретную тему, просматривать их.

Нечто подобное реализовано в системе Howm для Emacs, про которую я прочитал у Андрея Суховского.

Однако, заголовки используются для структурирования текста, поэтому чтобы маркировать заголовки-темы, я маркирую их символом «§»:

## § Это тема коллекции
## Это просто заголовок

Чтобы не мои ссылки-запросы не конфликтовали с форматами ссылок, используемых в Markdown, я использую свой формат. Ссылки у меня могут быть двух видов: обычная ссылка — §[Тема], и ссылка в виде элемента списка:

  - § Тема коллекции

Второй вариант удобно использовать в конце заметки, связывая ее с другими. На самом деле, вначале я придумал именно этот формат — я думал, как мне сделать такие ссылки в Obsidian, и для Obsidian есть плагин List Callouts, который позволяет настраивать выделение цветом такого вида списков. Кстати, для Obsidian я сделал шаблон Templater, который запускает поиск по указанной теме, если курсор стоит на такой ссылке. Не совсем то, что я делаю в Vim, но в принципе работает.

Плагин для Vim пока что существует в виде некоего прототипа — я веду заметки, пробую, допиливаю и перепиливаю код. Когда будет более-менее готов, выложу на GitHub, пожалуй.