Подсветка синтаксиса 1с в Obsidian

07.09.23

Разработка - Инструментарий разработчика

Как добавить подсветку синтаксиса 1с в систему заметок Obsidian

Скачать исходный код

Наименование Файл Версия Размер
Подсветка синтаксиса 1с в Obsidian
.zip 887,73Kb
12
.zip 887,73Kb 12 Скачать

Obsidian - это локальная база знаний, одна из самых дружесвенных из всех, что я на текущий попробовал. Сама база это просто папка на диске с файлами в формате Markdown. Такой сопособ хранения отлично дружит с Git. Так же она расширяется плагинами на подобии VS Code. Одна в ней была проблемма. При способности подсвечивать синтаксис на разных языках, нет в ней подсветки 1с. После изучения вопроса, я выяснил что для подсветки используется библиотека CodeMirror и уже есть реализованный для 1с модуль. Спасибо Сергею Кудашкину и Александра Колесникову на https://github.com/sikuda/codemirror-1C нашел то, что мне было нужно.

Сейчас по шагам распишу, что нужно делать. Все плагины, которые вы устанавливаете, устанавливаются непосредсвенно в папку с вашей базой знаний, или хранилищем в терминологии obsidian. Нужный нам плагин лежит в папке <ваша база знаний>\.obsidian\plugins\cm-editor-syntax-highlight-obsidian\

Поменять необходимо всего 1 файл main.js в двух местах. Нужно в перечисления модулей добавить наш модуль. Привожу пример кода:

CodeMirror.modeInfo = [
   ...
    {name: "BSL", mime: "text/x-bsl", mode: "bsl", ext: ["bsl"],alias: ["1s","1c"]},
   ...
]

 

И собственно сам модуль:

createCommonjsModule(function (module, exports) {
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// for 1C - http://code1c.sikuda.ru/
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function(mod) {
    mod(codemirror);
})(function(CodeMirror) {
"use strict";

CodeMirror.defineMode("bsl", function(conf, parserConf) {
    var ERRORCLASS = 'error';

    function wordRegexp(words) {
        return new RegExp("^((" + words.join(")|(") + "))([ ;\\/\\n\\t]|$)", "i"); //\\b \\W //[^$A-Za-z0-9А-ЯЁа-яё_]
    }
    
    var singleOperators = new RegExp("^[\\+\\-\\*/%&<>=]");
    var singleDelimiters = new RegExp("^[\\(\\)\\[\\]\\{\\},:=;\\.]");
    var doubleOperators = new RegExp("^((<>)|(<=)|(>=))");
    var identifiers = new RegExp("^[_A-Za-zА-ЯЁа-яё][_A-Za-z0-9А-ЯЁа-яё]*");

    var openingKeywords = ['если', 'if', 'пока', 'while', 'для', 'for', 'процедура', 'procedure', 'функция', 'function', 'попытка', 'try'];
    var middleKeywords = ['иначе', 'else', 'иначеесли', 'elsif', 'исключение', 'except'];
    var doubleClosing = wordRegexp(['конецесли', 'endif', 'конеццикла', 'enddo', 'конецпроцедуры', 'endprocedure', 'конецфункции', 'endfunction', 'конецпопытки', 'endtry']);
    var endKeywords = ['loop'];
    var operatorKeywords = ['and', 'or', 'not', 'xor', 'in'];
    var commonKeywords = ['новый', 'new', 'каждого', 'each', 'из', 'from', 'цикл', 'do', 'или', 'or', 'не', 'not', 'ложь', 'false', 'истина', 'true', 'и','and', 'возврат', 'return', 'тогда', 'then', 'экспорт', 'export', 'неопределено', 'undefined', 'продолжить', 'continue', 'прервать', 'break', 'перейти', 'goto', 'по', 'to' , 'null'];
    var commontypes = ['перем', 'var', 'знач', 'val'];

    var wordOperators = wordRegexp(operatorKeywords);
    var keywords = wordRegexp(commonKeywords);
    var types = wordRegexp(commontypes);
    var stringPrefixes = '"';
    var stringNewLine  = '|';

    var opening = wordRegexp(openingKeywords);
    var middle = wordRegexp(middleKeywords);
    var closing = wordRegexp(endKeywords);
    var doOpening = wordRegexp(['do', 'пока']);
    
    var indentInfo = null;

    CodeMirror.registerHelper("hintWords", "bsl", openingKeywords.concat(middleKeywords).concat(endKeywords).concat(operatorKeywords).concat(commonKeywords).concat(commontypes));

    //CodeMirror.registerHelper("hint", "1c", openingKeywords.concat(middleKeywords).concat(endKeywords).concat(operatorKeywords).concat(commonKeywords).concat(commontypes));
    
    function indent(_stream, state) {
      state.currentIndent++;
    }

    function dedent(_stream, state) {
      state.currentIndent--;
    }
    // tokenizers
    function tokenBase(stream, state) {
        if (stream.eatSpace()) {
            return null;
        }

        var ch = stream.peek();

        // Handle Comments
        if (ch === "/") {
            var ch_next = stream.string.charAt(stream.pos+1) || undefined;
            if (ch_next === "/") {
                stream.skipToEnd();
                return "comment";
            }
         }

        //handle meta - &OnClient or #If
        if (ch === "&" || ch === "#") {
            stream.skipToEnd();
            return "meta";
        }

        //~nameLabel
        if (ch === "~"){
            stream.next();
            stream.match(identifiers);
            return 'label';
        }

        
        // Handle Number Literals
        if (stream.match(/^\.?[0-9]{1,}/i, false)) {
            var floatLiteral = false;
            // Floats
            if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; }
            else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; }
            else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; }

            if (floatLiteral) {
                // Float literals may be "imaginary"
                stream.eat(/J/i);
                return 'number';
            }
            // Integers
            var intLiteral = false;
            // Hex
            if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; }
            // Octal
            else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; }
            // Decimal
            else if (stream.match(/^[0-9]\d*F?/)) {
                // Decimal literals may be "imaginary"
                stream.eat(/J/i);
                // TODO - Can you have imaginary longs?
                intLiteral = true;
            }
            // Zero by itself with no other piece of number.
            else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; }
            if (intLiteral) {
                // Integer literals may be "long"
                stream.eat(/L/i);
                return 'number';
            }
        }

        // Handle Strings
        if (stream.match(stringPrefixes)) {
            state.tokenize = tokenStringFactory(stringPrefixes);
            return state.tokenize(stream, state);
        }
        if (stream.match(stringNewLine)) {
            state.tokenize = tokenStringFactory(stringPrefixes);
            return state.tokenize(stream, state);
        }


        if (stream.match(doubleOperators)
            || stream.match(singleOperators)
            || stream.match(wordOperators)) {
            return 'operator';
        }
        if (stream.match(singleDelimiters)) {
            return 'delimiter';
        }
        if (stream.match(doOpening)) {
            indent(stream,state);
            state.doInCurrentLine = true;
            return 'keyword';
        }
        if (stream.match(opening)) {
            if (! state.doInCurrentLine)
              indent(stream,state);
            else
              state.doInCurrentLine = false;
            return 'keyword';
        }
        if (stream.match(middle)) {
            return 'keyword';
        }

        if (stream.match(doubleClosing)) {
            //dedent(stream,state);
            dedent(stream,state);
            return 'keyword';
        }
        if (stream.match(closing)) {
            dedent(stream,state);
            return 'keyword';
        }

        if (stream.match(types)) {
            return 'keyword';
        }

        if (stream.match(keywords)) {
            return 'keyword';
        }

        if (stream.match(identifiers)) {
            return 'variable';
        }

        // Handle non-detected items
        stream.next();
        return ERRORCLASS;
    }

    function tokenStringFactory(delimiter) {
        var singleline = delimiter.length == 1;
        var OUTCLASS = 'string';

        return function(stream, state) {
            while (!stream.eol()) {
                stream.eatWhile(/[^'"]/);
                if (stream.match(delimiter)) {
                    state.tokenize = tokenBase;
                    return OUTCLASS;
                } else {
                    stream.eat(/['"]/);
                }
            }
            if (singleline) {
                if (parserConf.singleLineStringErrors) {
                    return ERRORCLASS;
                } else {
                    state.tokenize = tokenBase;
                }
            }
            return OUTCLASS;
        };
    }


    function tokenLexer(stream, state) {
        var style = state.tokenize(stream, state);
        var current = stream.current();

        var delimiter_index = '[({'.indexOf(current);
        if (delimiter_index !== -1) {
            indent(stream, state );
        }
        if (indentInfo === 'dedent') {
            if (dedent(stream, state)) {
                return ERRORCLASS;
            }
        }
        delimiter_index = '])}'.indexOf(current);
        if (delimiter_index !== -1) {
            if (dedent(stream, state)) {
                return ERRORCLASS;
            }
        }
        return style;
    }

    var external = {
        electricChars:"dDpPtTfFeE ",
        startState: function() {
            return {
              tokenize: tokenBase,
              lastToken: null,
              currentIndent: 0,
              nextLineIndent: 0,
              doInCurrentLine: false
          };
        },

        token: function(stream, state) {
            if (stream.sol()) {
              state.currentIndent += state.nextLineIndent;
              state.nextLineIndent = 0;
              state.doInCurrentLine = 0;
            }
            var style = tokenLexer(stream, state);
            state.lastToken = {style:style, content: stream.current()};
            return style;
        },

        indent: function(state, textAfter) {
            var trueText = textAfter.replace(/^\s+|\s+$/g, '') ;
            if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1);
            if(state.currentIndent < 0) return 0;
            return state.currentIndent * conf.indentUnit;
        },

        lineComment: "'"
    };
    return external;
});

CodeMirror.defineMIME("text/x-bsl", "bsl");

});  
});

 

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

Для тех кому лениво заниматся кописастом, прилагаю файлик исправленного модуля.

Obsidian заметки база знаний

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    127543    688    389    

740

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    8503    25    6    

47

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4809    12    2    

38

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 руб.

14.01.2013    179039    1086    0    

863

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15142    3    12    

38

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    100027    239    97    

298

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28463    4    10    

16

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18569    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 165 07.09.23 22:35 Сейчас в теме
Очень интересно!
Поставил, вроде заработало, но
зачем-то перед знаком равно воткнуло символ \

КомпоновщикНастроек\=

Как можно исправить?
9. stoptime 403 08.09.23 11:10 Сейчас в теме
(1)
КомпоновщикНастроек\=
Не знаю, у меня такое поведение не наблюдалось.
10. leosoft 165 08.09.23 11:18 Сейчас в теме
(9) У меня в заметке был код на 1С, я его решил обернуть в блок кода,
в этот момент у всех = появился \=
А если сначала пустой блок создать, а потом туда вставить код - все нормально.
13. stoptime 403 08.09.23 11:27 Сейчас в теме
(10)Значит символ был, \ в Obsidian не отображается. Я из за этого пути файлов в одиночные обратные кавычки всегда оборачиваю
12. leosoft 165 08.09.23 11:20 Сейчас в теме
(9) И еще вопросик - как задать свои цвета для разметки?
14. stoptime 403 08.09.23 11:29 Сейчас в теме
(12) для темной темы в той же папке styles.css . А вот для светлой упакован в base64 в самом файлике main
2. pma_2015 130 08.09.23 09:22 Сейчас в теме
Для какой версии Obsidian модуль: 1.4.5?
6. stoptime 403 08.09.23 10:58 Сейчас в теме
(2) На текущий момент я 1.4.5 использую. Но работало и раньше с 0.9 версии.
3. infosoft-v 878 08.09.23 09:22 Сейчас в теме
Очень круто.
Подскажите, а для Joplin такая настройка подойдет? Может можно адаптировать?
8. stoptime 403 08.09.23 11:07 Сейчас в теме
(3) Joplin вроде тоже CodeMirror использует, посмотрел мельком там немного по другому сделали. Но если погрузится можно думаю прикрутить.
4. tolyan_ekb 104 08.09.23 10:29 Сейчас в теме
Орфографию бы в публикации проверить и поправить
5. a_plastinin 260 08.09.23 10:54 Сейчас в теме
Дополню чуть, что в режиме просмотра (Rendered) используется prism.js. Там подсветка bsl работает из коробки.
user2056853; mrChOP93; JohnyDeath; stoptime; +4 Ответить
7. stoptime 403 08.09.23 11:02 Сейчас в теме
(5) Спасибо за дополнение. Я об этом не упомянул.
a_plastinin; +1 Ответить
11. leosoft 165 08.09.23 11:19 Сейчас в теме
(5) А где этот prism лежит? В каком-то плагине тоже?
16. stoptime 403 08.09.23 12:09 Сейчас в теме
(11) Нет это встроеная библиотека, все там можно чере css настроить под себя. Пока туда не погружался. После этого вопроса появилось такое желание. Если что получиться, напишу здесь.
18. stoptime 403 08.09.23 12:22 Сейчас в теме
(11)Посмотрел, можно поставить плагины Style Settings и CodeMirror Options и там уже развлекаться с внешним видом.
20. leosoft 165 08.09.23 14:57 Сейчас в теме
15. Gaster 08.09.23 11:34 Сейчас в теме
Отличные новости, спасибо!
17. kuzyara 1988 08.09.23 12:18 Сейчас в теме
в обсидиане синхронизация с облаком и хостинг платные?
19. stoptime 403 08.09.23 12:24 Сейчас в теме
(17)Если их родной использовать, то да. На то и живут. Я для этих целей git использую, на своих серверах. Все хранилище это просто каталог с текстовыми файлами и картинками. Для синхронизации этого есть куча способов.
21. user1493358 08.09.23 15:08 Сейчас в теме
Так есть же по дефолту подсветка.
22. ixijixi 1805 08.09.23 15:46 Сейчас в теме
Коллеги, смотрю публикация получила неплохой отклик, значит Обсидиан активно 1сниками используется, а я ни сном ни духом. Можете тезисно накидать, для чего он может пригодиться? Навскидку вижу использование в качестве хранилища шаблонов, но 1С в шаблоны и так умеет "искаропки". В чём же ещё профит от использования?
23. stoptime 403 08.09.23 16:31 Сейчас в теме
(22) Опишу свой опыт, если у когото есть свои соображения прошу добавить.
Для меня это в первыую очердь база знаний. Раньше были попытки для этого использовать движок wiki - не прижилось.
В базе собираются Статьи, мои мысли по поводу статей.
Конечно же код, и не только на 1с, и в не целях работы над ним. Для этого другие инструменты использую. А для сохранения и размышления
Записки по проэктам, по контактам на проэктах и всей подноготной, которая лично мне нужна, но ни в какую корпоративную систему я это не положу.
Есть удобный поиск по тексту, по тегам
Система плагинов, которая позволяет настроить под себя в достаточно широком диапазоне. Для примера, я например использую плагин Kanban, чтобы у меня была моя персональная доска. Знаю что есть аналоги, но история с недавно закрывшим доступ Trello как бы намекает, что не все удобное есть добро. Есть и отечественные аналоги, которые для работы использую. Так что это ворос лично моего предпочтения.
Есть набор плагинов, который позволяет работать с pdf файлами, я это использую для чтения технических книг. Снабжаю их ссылками на другие материалы и делаю для себя заметки и выделения.
Вся база, по сути набор текстовых файлов, и в нее можно легко и очень гибко подключать всяки сценарии автоматизации. Плюс все это версионировать.
Внутри можно использовать внутренние и внешние ссылки. Внутренние обновляются, при изменении имен файлов в процессе работы с программой.
LeXXeR; JohnyDeath; svbel85; Cmapnep; Bassgood; +5 Ответить
24. ixijixi 1805 08.09.23 16:40 Сейчас в теме
(23) Спасибо, вижу, что диапазон широк, интересно, но в моей практике мало применимо. Послушаем других участников)

Спасибо еще раз!
25. leosoft 165 08.09.23 22:25 Сейчас в теме
(24) По сути это wiki система с перекрестными ссылками.
Все заметки - это отдельные текстовые файлы в формате markdown.
Есть система иерархических тегов, папок и т.п.
Мощная поисковая система, интерфейс по аналогии с VS Code вроде на том же движке.
Пока бесплатная.
26. ixijixi 1805 09.09.23 09:22 Сейчас в теме
(25) Так, а 1снику это зачем?
triviumfan; +1 Ответить
27. leosoft 165 09.09.23 10:44 Сейчас в теме
(26) Можно код хранить и систематизировать, описания всяких обработок и т.п.
Конспекты всяких семинаров и курсов.
Информацию по клиентам, контактов с ними, информация о доработках.
29. user1658716 09.09.23 22:11 Сейчас в теме
(26)https://github.com/Ndochp/1c_fight_and_work
У меня примерно так. Для публикации специально не готовилось, если найдете пароли - свистните.

Из неприятного - делать ссылки в стиле [[]] удобнее, чем в стиле МД, но за пределами обсидиана это не работает. Поэтому гитхаб становится неинтерактивным.
HectorPrima; twiny; +2 Ответить
28. triviumfan 93 09.09.23 17:47 Сейчас в теме
(24) Аналогично. Сценариев много, но зачем оно мне - не понятно)
32. mip128 13.09.23 09:38 Сейчас в теме
(23) это типа аналога oneNote?
35. stoptime 403 13.09.23 10:06 Сейчас в теме
(32) Как OneNote его тоже можно использовать.
44. pma_2015 130 01.11.23 18:18 Сейчас в теме
(23) Посмотрите плагин Projects. Вместо Kanban.
30. user1590291 10.09.23 21:19 Сейчас в теме
(22), говоря про Обсидиан нельзя не затронуть ещё и такую методологию ведения заметок как Цеттелькастен.
Вообще, если Вам интересно, то рекомендую прочитать вот этот цикл статей (если Вы не против длиннопостов, конечно.
stoptime; +1 Ответить
37. stoptime 403 13.09.23 11:39 Сейчас в теме
(30) Статьи стоющие, спасибо
31. Foxtrot1388 11.09.23 09:59 Сейчас в теме
Ну как бы у этого плагина (https://github.com/deathau/cm-editor-syntax-highlight-obsidian) ужа давненько висит PR для добавления этой функциональности, которая полностью игнорируется автором. При желании собрать плагин можно из форка.
twiny; stoptime; +2 Ответить
33. mip128 13.09.23 09:39 Сейчас в теме
34. Foxtrot1388 13.09.23 09:51 Сейчас в теме
36. stoptime 403 13.09.23 10:15 Сейчас в теме
(31) Не увидел, Денис. Спасибо за Вашу работу.
42. mip128 23.09.23 17:29 Сейчас в теме
(31) Честно, я не понял, что ты написал. Ты хотел, чтобы он сделал форк с этого репозитория для того, чтобы добавить подсветку 1С?
38. friskdb 30 13.09.23 14:22 Сейчас в теме
На версии 1.4.12 не сработало. Собрал main.js по инструкции.
43. twiny 15 10.10.23 10:37 Сейчас в теме
39. JohnyDeath 301 15.09.23 09:14 Сейчас в теме
Я посматриваю в сторону AppFlowy. Это опенсорс "аналог" notion. Последним я пользуюсь в том числе и для размещения документации для пользователей.
Но понимаю, что в любой момент notion может просто уехать из РФ, как это сделали многие западные компании. Поэтому и смотрю на аналоги, которые можно разместить у себя.
AppFlowy не смотрели?
40. Sergik_D 20 18.09.23 13:37 Сейчас в теме
(39) Те же опасения испытываю насчет Notion ) AppFlowy где данные хранит?
41. JohnyDeath 301 18.09.23 13:41 Сейчас в теме
(40) локально, где установишь.
На хранение файлов есть отдельная настройка
45. NeTan-root 01.12.23 21:05 Сейчас в теме
Кто смотрел сравнивал Obsidian с Anytype? Вроде очень нравится что есть объекты, типы, свойства, большое количество связей и возможностей отборов. Шифрование, блокчейн хранение (кажется можно даже паролик какой сохранить и не бояться за него, правда?). Синхронизация и локальное хранение уже из коробки. Смесь Noition и Obsidian. На каждый тип делаешь сразу шаблон, удобно добавлять новые объекты итд, печать в PDF тоже есть. Не требует четкой иерархии и папок, сразу добавляешь плоско, но с большим количеством связей. Т.е. вроде все это можно настроить и в Obsidian, но тут уже из коробки все есть, и самое главное все интерактивно, не нужно помнить все настройки плагинов и всякую их разметку, синтаксис, писать запросы итд. Но есть и неудобные нюансы с которыми придется какое-то время мириться. Но в общих чертах вроде как свои функции выполняет и не надо морочить голову над архитектурой как в Obsidian. До сих пор не могу выбрать для себя что будет основным приложением...


Если еще актуально для плагина syntax-highlight написал дополнение, в которое запихнул код из шапки и он даже работает. Если кому нужно, пользуйтесь. Как уже заметили выше подсветка BSL есть в Obsidian из коробки, но только в режиме просмотра, а в режиме редактирования можно видеть через этот плагин. Осталось только разобраться как настроить цвета для конкретного синтаксиса не зависимо от темы, чтобы прям по красоте 1С код был.

Папку с плагином закинуть в папку <ваша база знаний>\.obsidian\plugins\, затем включить в настройках.
Прикрепленные файлы:
bsl-syntax-highlight.7z
friskdb; Mistrall; +2 Ответить
46. Kyrales 144 14.02.24 23:42 Сейчас в теме
(45)

Попробовал и не работает в режиме редактирования. Может чего еще потыкать надо?
47. GeraltSnow 172 06.03.24 15:36 Сейчас в теме
(46) Тоже столкнулся с такой проблемой. Выяснил, что плагин чувствителен к регистру названия языка из заголовка блока кода. Так что нужно писать ```bsl, а не ```BSL, чтобы подсветка активировалась. Если хочется второй вариант - нужно переписать в main.js строку

CodeMirror.defineMode("bsl", function(conf, parserConf) { 


на

CodeMirror.defineMode("BSL", function(conf, parserConf) {
48. Kyrales 144 13.03.24 20:42 Сейчас в теме
(47) да, заработало. Спасибо
Оставьте свое сообщение