vim
May 23, 2023

Готовим vim для markdown 

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

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

Базовые настройки

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

Даже без плагинов vim позволяет редактировать тексты удобным способом. При правильной настройке, vim поддерживает синтаксическую подсветку и механизм сворачивания документа(folding) . Небольшой коррекции требует механизм автоматического переноса длинных строк. Кроме того, мы здесь затронем вопрос об автоматической проверке орфографии.

Будет сказано несколько слов про плагин vim-markdown, и про механизм сокрытия разметки (concealing). Также вы узнаете о том, как добавить функции для просмотра документов в консоли и браузерах.

Переносы строк

Автоматический перенос строк довольно неудобен при наборе разметки markdown. В этом случае редактор ограничивает длину строки и автоматически вставляет символы конца строки, а это часто приводит некорректному отображению текста в других программах и при преобразовании документа к другим форматам(особенно это касается формата HTML).

По спецификации markdown CommonMark, символы конца строки не должны приводить при преобразовании в html к появлению </br>. Но если вы, например, пишете readme для проекта на gitlab, то именно такой эффект вы и получите. Разные сайты и разные программы при преобразовании документов могут вести себя по-разному.

Отключить автоперенос строк можно с помощью установки параметра

:set textwidh=0

Поскольку автоперенос довольно удобен во многих случаях, то мы его отключаем только для файлов типа md.
Для этого добавляем в vimrc строчку:

autocmd Bufread *.md  setlocal textwidth=0

Напомним, что за отображение строк отвечает также и параметр line wrapping. Он изменяет только режим отображения длинных строк, никакие символы при этом в строку не добавляются. Его можно переключить в любое время:

:set wrap!

Folding

Сворачивание/разворачивание текста(т.н. folding) настраивается с помощью нескольких параметров .vimrc.
На текущий момент я использую следующие параметры для различных типов документов:

""----------------------------------------------
" folding
"-----------------------------------------------
set foldenable
set foldmethod=indent
set foldminlines=4
set foldnestmax=4

Для активации этой функции для markdown в .vimrc следует добавить ещё одну строчку.

let g:markdown_folding=1
folding

Автоматическая проверка правописания - spell

Словари для vim-spell можно скачать по ссылке: http://ftp.vim.org/pub/vim/runtime/spell/

Независимо от локали системы, вы можете установить проверку правописания для любого языка. Необходимые словари должны быть в установлены в системе, или их можно просто положить в папку $HOME/.vim/spell/.

Включаем автоматическую проверку правописания для русского языка. Для этого следует добавить в .vimrc настройки языка для документов типа markdown.

" Set spell check to Russian
autocmd FileType markdown setlocal spell spelllang=ru

Включить или выключить проверку правописания можно с помощью команд:

:set spell
:set nospell

Плагины

Оглавления и плагин tagbar

Этот плагин воистину универсальный швейцарский нож.
Без каких-либо специальных настроек он просто показывает оглавление в отдельном окне в том числе и для markdown.

Плагин vim-markdown.

Дополнительный набор функций для работы с markdown реализован в плагине vim-markdown. В первую очередь он содержит набор функций для сокрытия разметки(режим conceal). Кроме того, плагин позволяет создавать оглавления документа в отдельном окне и добавляет дополнительные клавиатурные комбинации для быстрого перемещения по структуре документа.

При этом в vim для MS Windows перестает работать folding. В vim для Linux folding работает как с плагином так и без оного. Нужен ли вам такой плагин, если вы пользуетесь Windows, решайте сами.

OS MS Windows существенно ограничивает набор применяемых утилит и программ, так, например, иногда попадаются плагины для vim, которые не работают в этой OS. Поскольку значительная часть инструментов для системных администраторов и программистов развивается на открытых платформах, то использование MS Windows становится для профессионалов не очень привлекательным

Я бы сказал, что ситуация с плагинами для vim довольно неоднозначная. Во-первых, плагинов очень много и, во-вторых, не все они полезны и, наконец, не все они работают хорошо. В большинстве случаев неплохим ориентиром служит сайт https://vimawesome.com/, на котором самые собраны самые популярные и, чаще всего, работоспособные плагины.

Conceal или нужен ли нам WISIWIG в текстовом редакторе?

Vim имеет механизм для сокрытия разметки. В случае с markdown мы можем отображать разметку полностью или частично скрывать. Но текущая строка всегда будет отображать разметку полностью. В последней версии vim 9, этот механизм с файлами типа markdown не работает вовсе, его реализовали в плагине vim-markdown. Правда, как я упоминал выше, после установки этого плагина перестаёт работать folding в системах MS Windows.

Механизм conceal


Для настройки conceal в .vimrc добавляем параметры:

let g:vim_markdown_conceal=1 
autocmd Bufread *.md  setlocal conceallevel=2

Параметр set conceallevel можно изменять динамически.

:set conceallevel=3

Для этого параметра можно указать значение от 0 до 3. Значение 0 выключает этот режим, а значение 3 позволяет скрыть разметку максимальным образом.
Можно поэкспериментировать задавая это значение и наблюдая при этом как меняется отображение ссылок, иллюстраций и прочих элементов разметки.

Некоторые текстовые редакторы(typora, например) имеют такой механизм. Выглядит это довольно эффектно, но для набора текста это не очень удобно. Желание реализовать режим WYSYWIG до некоторой степени противоречит философии консольного редактора, IMHO, разумеется.


Preview

Редакторы markdown обычно имеют механизм preview, который обычно отображает html страницу в браузере, полученную из документа с применением CSS, при этом можно увидеть как ошибки форматирования, так и ошибки преобразования md в html.

Для vim существует несколько плагинов такого рода. Их существенным недостатком являются неуниверсальность - они работают не во всех операционных системах и не со всеми браузерами.

Так, например, vim-markdown-preview будет работать только в Linux и Mac OS X, a sparkles Markdown Preview требует наличия JavaScript и дополнительных библиотек. Это имеет некоторый смысл, если вы используете эти инструменты для выполнения другой работы, устанавливать их для только для просмотра документов из vim мне кажется избыточным.

Простейший вариант предварительного просмотра документа можно получить безо всяких плагинов с помощью непосредственного запуска в окне Vim консольной программы для просмотра документов. Например, запуск glow в консоли выглядит вот так:

:vert term glow %
markdown preview in glow

Я полагаю, что на этом можно было бы и закончить тему. Мне кажется, что описанных настроек и механизмов достаточно для выполнения работ с документами в формате markdown.

Если кому-то потребуются более сложные инструменты, то можно посмотреть ещё пару плагинов.

mkdx-vim

Плагин содержит довольно значительное количество функций для форматирования документов. В том числе:

* Свертывание встроенных блоков кода
* Оглавление
* Обнаружение мертвых ссылок
* Улучшенную синтаксическую подсветку для таблиц, элементов списков, тегов kbd и выделенных полужирным шрифтом и курсивом маркеров.

Asynchronous Lint Engine

Этот плагин является клиентом для Language Server. Если вы используете vim для написания исходных текстов на каком-либо языке программирования, то вы можете использовать этот плагин в том числе и для проверки синтаксиса и семантики текстов в формате markdown.

Заключение

Вот таким образом выглядят основные возможности редактора для написания текстов в формате markdown. Совсем неплохо даже по сравнению со специализированными программами.