ВозможностиЦеныДокументацияБлог
Получить mote
← Блог
Дизайн·10 июля 2026 г.·4 мин чтения

Чтобы абзацы одинаково отображались и в других инструментах, мы определили правила клавиши Enter

Случалось ли вам нажать Enter один раз в редакторе Markdown и увидеть, как курсор переместился на две строки вниз? Или обнаружить, что абзацы, разделённые на экране, на GitHub слились в один? Это две стороны одного и того же вопроса.

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

Что должно происходить при нажатии Enter в редакторе Markdown?

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

mote выбрал способ, который позволяет писать абзацы естественно и при этом сохраняет файл в исходном виде.

Одно нажатие — одна строка вниз

В mote клавиша Enter создаёт новый абзац.

На экране курсор перемещается на одну строку вниз, а в файл добавляются два перевода строки. Если рядом с кареткой уже есть перевод строки, он считается половиной разделителя. Поэтому независимо от того, что находится вокруг, одно нажатие всегда соответствует одной строке.

Если нужно лишь перенести строку внутри того же абзаца, нажмите Shift+Enter. В файл добавится один перевод строки, а следующая строка останется в том же блоке. Это удобно, когда строки должны идти одна за другой, например в адресах или стихотворениях.

Пустая строка между абзацами отдельно на экране не отображается. Потому что она является разделителем абзацев. Каретка на ней тоже не задерживается. При нажатии Backspace разделение между абзацами исчезает целиком.

Одно действие ввода перемещает содержимое экрана ровно на одну строку.

Файл тоже остаётся настоящим Markdown

В Markdown абзацы разделяются двумя переводами строки.

Если считать один перевод строки границей абзаца, возникают проблемы. В файлах, созданных другими людьми, интервалы между абзацами увеличиваются вдвое, а файлы, созданные в mote, на GitHub или в Pandoc сливаются в один абзац.

Чтобы работать с такой моделью, Typora нормализует файл при сохранении. Например, сокращает три пустые строки до одной. mote не исправляет файл за пользователя. Потому что его принцип — не добавлять и не удалять байты, которых пользователь не вводил.

Вместо этого мы добавили ещё одно правило.

Мы не создаём строки, которые есть в файле, но которые нельзя ни увидеть, ни отредактировать. Скрывается только одна пустая строка, разделяющая абзацы, а все остальные отображаются на экране.

Для пустых строк тоже понадобились правила

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

Из-за этого происходили странные вещи. Если ввести текст в пустую строку, он присоединялся к нижнему абзацу, а для создания нового абзаца приходилось нажимать Enter ещё раз. После удаления абзаца иногда оставалась одна пустая строка.

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

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

Мы также точно определили случаи, когда Enter повторно использует окружающие переводы строки. Повторно используется только перевод строки, соединяющий две строки одного абзаца. Перевод строки, уже используемый для разделения абзацев, повторно не используется.

Backspace следует тому же принципу. При удалении пустого абзаца вместе с ним исчезают окружающие его разделители. Одно нажатие убирает только одну строку.

Это поведение проверяется одновременно на экране и в файле. В одном и том же тесте проверяется не только высота строк на экране, но и байты, фактически сохранённые в файле.

В режиме исходного текста файл показывается как есть

Правила абзацев применяются только в режиме предварительного просмотра и режиме чтения.

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

Тот же документ в режиме исходного текста — # в заголовке, две звёздочки полужирного начертания и дефис списка отображаются как обычные символы, а каждая пустая строка между блоками занимает отдельную строку
Тот же документ в режиме исходного текста — # в заголовке, две звёздочки полужирного начертания и дефис списка отображаются как обычные символы, а каждая пустая строка между блоками занимает отдельную строку

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

У отображения без изменений тоже есть ограничения

Если файл заканчивается переводом строки, в конце отображается одна пустая строка.

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

Документы, в которых в прежней версии mote абзацы разделялись одним переводом строки, теперь отображаются как один абзац. Это соответствует правилам Markdown. Чтобы разделить абзацы, достаточно нажать Enter ещё раз в нужном месте. mote не станет тайком исправлять файл.

Абзац не существует исключительно на экране или исключительно в файле. mote устроен так, чтобы текст естественно набирался на экране и при этом сохранялся в файле как настоящий Markdown.

← РанееПочему набор текста не замедляется даже в длинных документахПозже →Как быстро отображать формулы без веб-движка
Следите за новостями через RSS.
Оставьте только текст
Русский
© 2026 mote