В Emacs 31 появилось много нового, и один из примечательных релизов — режим markdown-ts-mode. На версии Emacs 31 он помечен как экспериментальный. Что это значит на практике: стоит ли им пользоваться, готов ли он к работе, или это лишь черновой набросок режима?

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

Насколько богат функционал?

Раз режим экспериментальный, значит требуется explicit opt-in, и не всё ещё может работать гладко — нужно больше тестирования и обратной связи.

Но пусть статус не вводит в заблуждение: по набору возможностей режим очень насыщенный. Он уже покрывает всю спецификацию CommonMark, а также большую часть GFM, плюс дополнительные фишки — подсветка блоков кода даже для языков без собственного ts-mode (например elisp), утилиты для оглавлений и интерфейсы для внешних конвертеров вроде pandoc и gfm.

Прежде чем погружаться самостоятельно, может понадобиться помощь просто с включением режима. Tree-sitter — штука с подводными камнями, и если это первый опыт работы с ним, пригодится краткая инструкция по установке.

Где искать режим? Нужно ли его устанавливать?

Экспериментальный статус означает, что Emacs не включает режим по умолчанию — он не активируется автоматически при открытии .md файла и не вызывается через M-x markdown-ts-mode RET. Библиотеку нужно загрузить вручную.

Как обычно в Emacs, способов сделать это несколько. Использование use-package для организации init-файла — предпочтительный вариант. Вот пример начальной настройки:

(use-package markdown-ts-mode
  :ensure nil
  :mode ("\\.md\\'" "\\.mdx\\'" "\\.markdown\\'")
  :config
  (require 'markdown-ts-mode-x))

Или без use-package:

(autoload 'markdown-ts-mode "markdown-ts-mode" nil t)

(dolist (re '("\\.md\\'" "\\.mdx\\'" "\\.markdown\\'"))
  (add-to-list 'auto-mode-alist (cons re 'markdown-ts-mode)))

(with-eval-after-load 'markdown-ts-mode
  (require 'markdown-ts-mode-x))

Теперь загружены и основной режим, и библиотека x с дополнительными приятными плюшками — Markdown-файлы можно открывать прямо в нём.

Чтобы поэкспериментировать без вмешательства в собственную конфигурацию:

  1. Сохранить приведённый выше код в файл вроде testing.el.
  2. Запустить emacs командой emacs -Q --load 'testing.el'.

Получится чистая сессия Emacs с готовым тестовым окружением — именно так и построено дальнейшее изложение.

ВАЖНО: НЕТ НУЖДЫ скачивать или добавлять этот пакет через менеджер пакетов. (Теперь очень старый и заархивированный) репозиторий MELPA откажется устанавливаться на Emacs версии 31 и старше и крайне беден по функционалу. Если используется он — значит используется не новый встроенный markdown-ts-mode. Продолжим.

Открываем первый markdown-файл

Чтобы наглядно продемонстрировать процесс, понадобятся скриншоты. Если это первый опыт с режимом на основе tree-sitter, стоит предупредить: несмотря на то что tree-sitter прекрасен, быстр и функционально богат, он приносит с собой набор дополнительных задач и, возможно, потребность в навыках отладки.

Для демонстрации используется этот тестовый файл.

Репозиторий, где он размещён, служит лабораторией — никакого кода там нет, весь код находится в самом Emacs.

Откройте файл test.md.

ВАЖНО: в этот момент может случиться разное. Если грамматика для markdown уже установлена в системе, файл откроется сразу. Но может появиться и такой запрос:

emacs_markdown_31_demo step 01

Это означает, что Emacs не нашёл грамматику для markdown в системе — в данном случае в ~/.emacs.d/tree-sitter/ (путь по умолчанию при старте с emacs -Q ...). Emacs предложит установить её, что означает скачивание и компиляцию из репозитория, уже указанного в исходном коде markdown-ts-mode. Установим её нажатием y. Emacs клонирует репозиторий грамматики, скомпилирует её и перейдёт ко второй грамматике. Да, markdown использует две грамматики: основную и для инлайн-разбора. Вторую тоже стоит установить нажатием y.

Успех!

Ожидаемая картина:

emacs_markdown_31_demo step 02

Если что-то пошло не так, стоит проверить следующее:

  1. Скомпилирован ли Emacs с флагом tree-sitter? Команда M-: (featurep 'treesit) RET должна вернуть t.

  2. Установлены ли инструменты для "компиляции" грамматик — make, gcc и прочие?

  3. Tree-sitter нуждается в пакете дистрибутива, обычно называемом tree-sitter-cli, который предоставляет бинарник tree-sitter — проверить наличие можно командой tree-sitter --version.

Это распространённая головная боль для всех режимов на tree-sitter. Многие предпочитают НЕ компилировать грамматики самостоятельно, а использовать уже скомпилированные файлы из доверенных источников — репозитория дистрибутива или пакетов с сотнями готовых грамматик. Погружаться в эту тему здесь не будем — способов получения грамматик много, но в рамках этого гида используется подход "собери сам".

На самом деле картинка была немного другой. Вот как на самом деле выглядит результат, если увиденное совпадает с задуманным:

emacs_markdown_31_demo step 03

Полный файл доступен здесь, с несколькими темами по умолчанию для сравнения полноты настройки.

Так что же произошло?

Это часть причины, почему markdown-ts-mode особенный.

Режим умеет работать не только с markdown, но и со всеми остальными доступными -ts-mode! Об этом стоит помнить — блоки кода будут обсуждаться чуть позже. Пока важно разобраться с парой моментов.

В файле test.md есть специальный заголовок. Довольно распространённая практика — использовать toml или yaml в качестве заголовков markdown-файлов.

Вот этот фрагмент:

---
title: The Official 'markdown-ts-mode.el' Feature Test File
author: Rahul Martim Juliato
date: 2026-03-18
version: 0.1.0
parsers needed: markdown, markdown-inline, yaml, toml, html, c, javascript, python, ruby, rust
---

Нужно кое-что ещё для fontify (то есть окрашивания текста в Emacs). Что здесь не хватает? Если ответ — "нужна грамматика для YAML!" — верно подмечено!

Когда что-то не подсвечивается корректно в -ts-mode, скорее всего, отсутствует грамматика. А поскольку markdown-ts-mode создан для работы со всеми доступными ts-mode, это не исключение.

Установим грамматику yaml проверенной командой M-x treesit-install-language-grammar RET yaml.

Дальше может появиться такая картина:

emacs_markdown_31_demo step 04

Согласимся нажатием y. Похоже, на этот раз что-то пошло не так с yaml-ts-mode при попытке зарегистрировать предпочитаемую грамматику через treesit-install — предложений не появилось. Грамматику можно указать вручную. Но сначала стоит кое-что проверить. Заглянув в yaml-ts-mode.el, можно посмотреть, какую грамматику ожидает исходный код:

;; from yaml-ts-mode.el
(add-to-list
 'treesit-language-source-alist
 '(yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml"
		:commit "b733d3f5f5005890f324333dd57e1f0badec5c87")
 t)

Достаточно вычислить этот блок и снова попытаться установить грамматику. Или вручную указать источник https://github.com/tree-sitter-grammars/tree-sitter-yaml в уже запущенной интерактивной сессии:

emacs_markdown_31_demo step 05

Далее — значения по умолчанию через RET RET RET... до завершения установки библиотеки.

После этого нужно перезагрузить markdown-ts-mode, воспользоваться C-x x g, либо заново открыть файл.

Обращение к исходному коду в этом случае — довольно редкая ситуация: большинство -ts-mode автоматически предлагают репозиторий, из которого будут компилировать грамматику. Здесь это произошло, что удобно для демонстрации нужных действий.

Дальше нужно повторить M-x treesit-install-language-grammar для каждого блока без подсветки. При желании для тестового файла можно воспользоваться C-x x f, чтобы принудительно вызвать fontification и получить запрос на каждую отсутствующую грамматику, используемую в файле.

К этому моменту весь документ должен быть подсвечен, как в примере здесь. То же самое, что на предыдущем изображении:

emacs_markdown_31_demo step 03

Заметка о грамматиках

-ts-mode настолько хорош, насколько хороша грамматика tree-sitter за ним. Это значит, что каждый -ts-mode должен постоянно поспевать за улучшениями grammar, которую разделяют все редакторы и программы, желающие использовать tree-sitter для разбора языка.

Это также означает зависимость от грамматики по определённым ограничениям и возможностям. Почти весь код -ts-mode в Emacs заполнен заметками об ограничениях и объяснениями, почему и как что-то неочевидное реализовано именно так.

Авторы и мейнтейнеры режимов Emacs всегда стараются указать грамматику и SHA-коммит, под который подготовлен ts-mode, либо в комментариях, либо в коде самого режима — так же, как это было с предложением для yaml. Часть поддержки ts-mode заключается в отслеживании новых версий грамматик. Команда старается держать всё в актуальном состоянии, но именно версия из исходного файла режима гарантированно протестирована и должна работать как ожидается.

Именно поэтому интерактивная компиляция грамматики самим пользователем в Emacs считается наилучшим способом получить приятный опыт.

Конкретно для markdown-ts-mode используются грамматики от https://github.com/tree-sitter-grammars/tree-sitter-markdown — как самые полные, поддерживаемые и широко принятые как редакторами кода, так и программами в целом. Это не значит, что они лишены багов или ограничений. Команда старается обходить эти ограничения и даже вносит issue как в саму грамматику, так и в основную библиотеку tree-sitter.

Markdown-файл наконец открыт!

Отлично! Что дальше? Как часто нужно повторять всю эту процедуру? Только один раз — при первом использовании -ts-mode, либо не потребуется вовсе, если грамматики уже установлены каким-то другим способом.

Теперь посмотрим, что уже предоставляет markdown-ts-mode.

Краткий обзор возможностей markdown-ts-mode

Режим создан автором этого материала и Стефаном Марксом (Stéphane Marks), и в нём предусмотрена функция easy-menu для быстрого знакомства с возможностями.

Доступ к ней — клик на Markdown в mode-line, либо, при включённом menu-bar-mode, в строке меню, или даже сочетанием Ctrl + правый клик (в зависимости от того, как Emacs маппит ввод ОС) на буфере в markdown-ts-mode.

emacs_markdown_31_demo step 06

По сути, это TL;DR всего гида — при желании можно остановиться и исследовать всё самостоятельно (дальше спойлеры).

Редактирование

Самый быстрый способ освоить режим — попробовать печатать всего понемногу. Дальше — быстрый обзор: что вводится, какая клавиша делает то же самое автоматически.

Разметка (выделение)

Markdown — простой текст, так что маркеры всегда можно вводить вручную:

Нужно Ввод
жирный **bold**
жирный, альт. __bold__
курсив *italic*
курсив, альт. _italic_
жирный + курсив ***both***
зачёркнутый ~~gone~~
инлайн-код `code`

Или доверить это режиму: C-c C-x C-f (markdown-ts-emphasize), затем одна клавиша:

  • b жирный, B жирный с подчёркиваниями
  • i курсив, I курсив с подчёркиваниями
  • a жирный + курсив
  • s зачёркнутый
  • c инлайн-код
  • SPC убрать выделение в точке курсора

Если активен регион, форматирование обернёт его. Без активного региона — обернёт слово под курсором, либо вставит пару символов и поместит курсор между ними.

emacs_markdown_31_demo step 07

Совет: C-c C-x RET (markdown-ts-toggle-hide-markup) скрывает сами маркеры, поэтому **bold** отображается как bold. Очень удобно для чтения во время редактирования — как в стандартном org-mode.

emacs_markdown_31_demo step 08

Ещё совет: M-q корректно форматирует текст даже внутри списков и цитат.

Заголовки

Вводятся так: #, ##, ... вплоть до ######. Setext-заголовки (подчёркивание === и ---) тоже распознаются.

Повышение и понижение уровня без перепечатывания решёток:

  • M-<left> повысить уровень (markdown-ts-promote)
  • M-<right> понизить уровень (markdown-ts-demote)

А также перемещение целого раздела, включая тело и вложенные подразделы:

  • M-<up> (markdown-ts-move-subtree-up)
  • M-<down> (markdown-ts-move-subtree-down)

TAB на заголовке циклически переключает видимость (сворачивание outline). Режим полноправно поддерживает outline-minor-mode, поэтому сворачивание работает "из коробки". S-TAB на заголовке переключает видимость всех заголовков сразу.

emacs_markdown_31_demo step 09

ВАЖНО: к этому моменту заметно, что режим по возможности проводит параллели с org-mode, чтобы пользователям Emacs, привыкшим к нему, было проще адаптироваться к markdown. Если эти сочетания клавиш не подходят — всё настраивается.

Списки (списки и чекбоксы)

Вводится - item, + item, * item или 1. item.

  • M-RET новый элемент списка (markdown-ts-insert-list-item)
  • RET умная клавиша: markdown-ts-newline продолжает список автоматически
  • M-<left> / M-<right> повысить/понизить уровень элемента
  • C-c C-r перенумеровать нумерованный список (markdown-ts-renumber-list)
  • C-c C-c переключить чекбокс задачи (markdown-ts-toggle-checkbox)
  • M-q корректно форматирует текст внутри элемента

Списки задач — как в GFM:

- [ ] not done
- [x] done

Необработанный вид:

emacs_markdown_31_demo step 10

Со скрытой разметкой:

emacs_markdown_31_demo step 11

Стоит отметить: маркеры и чекбоксы, видимые после переключения C-c C-x RET, — это только отображение. Буфер по-прежнему хранит символы - и [x]. Смотрите markdown-ts-unordered-list-marker, markdown-ts-checked-checkbox и markdown-ts-unchecked-checkbox.

Блоки

C-c C-, (markdown-ts-insert-structure), затем одна клавиша:

  • ` блок кода с обратными кавычками, запрашивает язык
  • ~ блок кода с тильдами
  • q блочная цитата
  • d разделитель (тематический разрыв)
  • t таблица

Если активен регион, он оборачивается вместо вставки пустого блока.

emacs_markdown_31_demo step 12

Со скрытой разметкой:

emacs_markdown_31_demo step 13

Блоки кода

Это главный трюк режима. Блок кода с обратными кавычками, помеченный языком, подсвечивается собственным режимом этого языка:

```python
def hello():
	return "world"
```

Отсутствие цветов обычно означает отсутствие грамматики — та же история, что и с заголовком yaml ранее.

Ещё лучше цветов: если поместить курсор внутрь блока, активируется markdown-ts-code-block-in-context-mode (индикатор [code] в mode-line). Внутри него:

  • TAB отступает так же, как язык
  • RET перенос строки с отступом, как в языке
  • M-q форматирует текст, как язык
  • M-. переход к определению через xref

Переход между блоками — C-c C-v n и C-c C-v p.

Работают и режимы без tree-sitter, включая elisp. Настройки: markdown-ts-code-block-modes, markdown-ts-default-code-block-mode, markdown-ts-fontify-code-blocks-natively.

Пример в необработанном виде:

emacs_markdown_31_demo step 14

Со скрытой разметкой:

emacs_markdown_31_demo step 15

Таблицы

Вставка через C-c C-, t или M-x markdown-ts-table-insert-table, которая запрашивает количество строк и столбцов.

| Column 1 | Column 2 |
|----------|:---------|
| a        |        1 |

Внутри таблицы активен markdown-ts-in-table-mode (индикатор [table]), и клавиши меняются:

  • TAB / S-TAB следующая/предыдущая ячейка (также форматирует таблицу)
  • RET / S-RET следующая/предыдущая строка
  • M-RET вставить строку ниже
  • M-<up> / M-<down> переместить строку
  • M-<left> / M-<right> переместить столбец
  • M-S-<up> вставить строку выше, M-S-<down> удалить строку
  • M-S-<right> вставить столбец слева, M-S-<left> удалить столбец
  • C-c C-c выровнять всю таблицу
  • C-c C-t a задать выравнивание столбца (слева, по центру, справа)
  • C-c C-t t транспонировать таблицу

Плюс из меню: клонирование строк и столбцов, импорт CSV/TSV в регион и экспорт таблицы в CSV/TSV.

emacs_markdown_31_demo step 16

ЗАМЕТКА: в работе с таблицами пока есть ряд ограничений, в основном из-за особенностей разбора грамматикой, поэтому во время ввода может встречаться неподсвеченный текст. При этом все таблицы, соответствующие спецификации GFM, должны работать корректно.

Ссылки и изображения

Ссылки — обычные [text](url) и [text][ref]. Ссылки на фрагменты вроде [intro](#intro) кликабельны и переходят к заголовку в буфере, используя по умолчанию слаги в стиле GitHub.

Изображения отображаются инлайн. C-c C-x C-v переключает их отображение (markdown-ts-toggle-inline-images). Смотрите markdown-ts-image-max-width и markdown-ts-display-remote-inline-images для настройки размера и загрузки удалённых URL.

Markdown: emacs_markdown_31_demo step 17

После C-c C-x C-v: emacs_markdown_31_demo step 18

После C-c C-x RET: emacs_markdown_31_demo step 19

Навигация

  • TAB циклическое сворачивание в точке курсора
  • C-c C-n / C-c C-p следующий/предыдущий заголовок
  • C-c C-u перейти к родительскому заголовку
  • C-c C-f / C-c C-b следующий/предыдущий заголовок того же уровня
  • M-x imenu переход к любому заголовку или именованному блоку кода через автодополнение
  • C-c C-v n / C-c C-v p следующий/предыдущий блок кода

markdown-ts-default-folding определяет, как открывается файл: полностью развёрнутым или свёрнутым.

markdown-ts-view-mode

M-x markdown-ts-view-mode — режим только для чтения с однокнопочной навигацией: n, p, u, f, b, TAB. Удобно для чтения README без риска случайно что-то напечатать.

emacs_markdown_31_demo step 20

Дополнительные функции

Всё, что описано ниже, находится в markdown-ts-mode-x.el — именно поэтому эта библиотека загружалась в настройке ранее.

Оглавление (TOC)

Оглавление ограничено HTML-комментариями, поэтому переживает рендеринг где угодно:

<!-- markdown-ts-toc: -->
<!-- markdown-ts-toc-end: -->
  • M-x markdown-ts-toc-insert-template вставляет эти маркеры, базовый или полный вариант (полный перечисляет все параметры со значениями по умолчанию)
  • M-x markdown-ts-toc-generate заполняет оглавление и обновляет его при каждом вызове
  • M-x markdown-ts-toc-clear очищает содержимое, markdown-ts-toc-clear-and-remove также удаляет маркеры
  • M-x markdown-ts-toc-update-before-save-mode регенерирует оглавление при сохранении

Параметры указываются инлайн в открывающем комментарии: min-depth, max-depth, candidates, from, style, indent, no-link, relative-depth, ignore. В одном буфере может быть несколько таблиц с разными параметрами. Кандидатами для оглавления служат не только заголовки — списки, setext-заголовки и именованные блоки кода тоже могут в него попадать.

Необработанный вид:

emacs_markdown_31_demo step 21

Со скрытой разметкой:

emacs_markdown_31_demo step 22

Экспорт

M-x markdown-ts-convert конвертирует буфер, markdown-ts-convert-file — файл. Запрашиваются формат и конвертер, если не задан markdown-ts-default-converter. Поддерживается "из коробки":

  • PDF через pandoc
  • HTML через pandoc, cmark, cmark-gfm, markdown, markdown.pl

С префиксным аргументом результат отображается — по умолчанию через eww. Для открытия в браузере смотрите markdown-ts-convert-display-function. Это своего рода "живой" предпросмотр. Конвертация пока не выполняется автоматически при изменениях — возможно, появится в будущем.

Пример с eww, разделение экрана сделано вручную для демонстрации:

emacs_markdown_31_demo step 23

Спецификация под рукой

M-x markdown-ts-browse-commonmark-spec и M-x markdown-ts-browse-gfm-spec открывают спецификации — пригодится, когда нужно разрешить спор.

Эксперименты с eglot и eldoc

Это экспериментальная функция внутри экспериментального режима, так что не стоит винить автора eglot, если что-то пойдёт не так. Баг-репорт лучше отправить в markdown-ts-mode.

При установке следующей настройки:

(setopt eglot-documentation-renderer #'markdown-ts-view-mode)

Eglot попытается рендерить документацию (обычно предоставляемую LSP-сервером в формате Markdown) через markdown-ts-mode.

emacs_markdown_31_demo step 24

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

Настройки

M-x customize-group RET markdown-ts RET — стоит просмотреть содержимое. Некоторые настройки, заслуживающие внимания в первую очередь:

  • markdown-ts для отображения: скрытие разметки, многоточие, маркеры списков, чекбоксы, символы тематического разрыва и жёсткого переноса строки, инлайн-изображения, сворачивание при открытии
  • блоки кода: markdown-ts-code-block-modes, markdown-ts-default-code-block-mode, markdown-ts-enable-code-block-context-mode
  • таблицы: markdown-ts-enable-table-mode, markdown-ts-table-auto-align, markdown-ts-table-default-column-width
  • markdown-ts-convert для экспорта
  • markdown-ts-toc для оглавлений

Начертания также настраиваются — по одному на каждый элемент Markdown.

Как можно помочь

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

Если что-то работает не так, как ожидалось, стоит сообщить об этом как о баге прямо из Emacs командой M-x report-emacs-bug RET. Желательно приложить небольшой пример, воспроизводящий проблему. Это особенно полезно для проблем с подсветкой, грамматиками tree-sitter, таблицами, блоками кода или взаимодействием с другими режимами.

Шероховатости всё ещё дорабатываются, поэтому баг-репорты, обратная связь и тестирование в реальных условиях крайне приветствуются.

Найден баг — это вина markdown-ts-mode?

Некоторые сюрпризы при использовании markdown-ts-mode могут быть связаны с самим режимом, некоторые — с грамматикой, некоторые — с тем, как tree-sitter интегрирован в Emacs, или с экосистемой tree-sitter в целом. Понимание этого заранее помогает осознать, что отладка — задача не из простых.

Грамматики — общий внешний ресурс

Грамматика написана не специально для Emacs. Тот же самый tree-sitter-markdown используется другими редакторами и инструментами, поэтому любое изменение в ней согласовывается со всеми пользователями. Это благо для экосистемы, но также означает, что желаемое исправление может ждать долго или вообще не появиться в желаемом виде. В таких случаях команда обходит проблему средствами самого режима и сообщает о проблеме выше по цепочке.

Так что если найденная проблема выглядит как баг режима, а ответ оказывается "грамматика разбирает это именно так" — теперь понятно, откуда берётся такой ответ. Сообщать об этом всё равно стоит — лучше услышать о проблеме дважды, чем не услышать вовсе.

Сборка грамматик тоже не без своих особенностей. Не каждая грамматика собирается одним лишь make и компилятором C: некоторые генерируются из определения на JavaScript, поэтому путь сборки предполагает наличие CLI tree-sitter, а иногда и установленного Node.js. Во многом именно поэтому так популярны предкомпилированные наборы грамматик и пакеты дистрибутивов. Как уже упоминалось, интерактивная компиляция из Emacs остаётся предпочтительным вариантом, но теперь понятно, почему дистрибутив может подтягивать больше зависимостей, чем ожидалось.

Косвенные буферы

Этот момент заслуживает отдельного предупреждения, поскольку часто удивляет пользователей: tree-sitter и косвенные буферы (indirect buffers) не дружат друг с другом.

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

  2. Font-lock в косвенных буферах вообще не поддерживается — это ограничение самого Emacs.

Практическое следствие: если используется пакет, клонирующий регион в косвенный буфер, подсветки там ожидать не стоит (по крайней мере на момент написания). Это не специфика markdown-ts-mode — касается любого -ts-mode, и исправить это средствами режима невозможно.

Дополнительное чтение

Тем, кого заинтересовала тема, стоит обратить внимание на немало хорошего материала о написании и использовании режимов на tree-sitter. Стефан Маркс, соавтор режима, составил список ниже — слишком хороший, чтобы держать его при себе. Часть материалов может немного устареть — tree-sitter развивается быстро, но рассуждения в этих статьях остаются актуальными:

И, конечно, заметки от людей, встроивших всё это в Emacs — Юаня Фу (Yuan Fu) и Юрия Линкова (Juri Linkov), ближайшего аналога канонического справочника по теме:

Выйдет ли режим из статуса experimental в следующем релизе Emacs?

В начале материала прозвучал вопрос:

Что это значит? Стоит ли им пользоваться, готов ли он к работе, или это лишь черновой набросок режима?

Теперь, вероятно, ответ стал понятнее.

experimental не означает, что markdown-ts-mode — лишь набросок или что в нём отсутствуют базовые функции, ожидаемые от режима Markdown. Это значит, что режим продолжает развиваться, и пока рано обещать неизменность API, поведения или отдельных возможностей.

Так стоит ли им пользоваться? Да! Если статус "экспериментальный" не пугает — стоит попробовать. Чем больше людей используют режим с разными Markdown-файлами, конфигурациями и рабочими процессами, тем проще находить проблемы и исправлять их.

Выйдет ли режим из статуса experimental в следующем релизе Emacs? Возможно — команда определённо к этому стремится! Осталось ещё немало моментов для доработки, ограничений для обхода и обратной связи для обработки, прежде чем можно будет дать окончательный ответ.

А пока — это приглашение попробовать режим в деле. И если что-то покажется странным, не стоит просто обходить проблему стороной — лучше сообщить о ней. Именно так режим и доводится до готовности.