[О блоге] [наверх] [пред] [2017-05-19 19:24:45+03:00] [888573d42b011c54fced0339adc79969fface36d]
Темы: [tip][vim]

Форматирование *-списков в Vim

Я годами немного мучался (до есть было не очень приятно что автоматика
не срабатывает или работает не как надо) с ситуациями когда пишешь
списки вида:

    * foo...
      baz
    * bar

Автоматика считает что "*" является комментарием и после ввода

    * foo...

и Enter он создаёт (> символ показывает где курсор):

    * foo...
    * >

а хочется:

    * foo...
      >

Но я как-то рефлекторно просто выделял всё звёздочки кроме первой
визуальным вертикальным выделением и делал "r ".

Но основная проблема это форматирование (gq команда) абзаца, где он
делает:

    * foo...
    baz

Эту проблему я решал так: писал весь текст без звёздочки в начале, но с
двумя пробелами, форматировал, а потом просто "r*" вставлял звёздочку
где надо.

Минут за десять всё же добился результата который мне нужен был за счёт
трёх команд в vimrc:

    set comments-=mb:*
    set formatlistpat=^\\s*\\*\ \\s*
    set formatoptions+=n

Во-первых, говорим что звёздочка в начале строки не является
комментарием. Да, это ломает наверное хорошую работу в языках типа C++
где есть /* ... * ... */ комментарии. Но я такие не использую и поэтому
оно ничего не ломает.

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

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

То бишь, из коробки Vim предоставляет все ручки управления для
идеального поведения и решения двух проблем с этими списками у меня.
А я думал что небось придётся делать какое-нибудь переопределение
команды форматирования, где я удалю эту звёздочку, сделаю форматирование
и снова её поставлю. То есть просто автоматизирую то, что делал руками.

    [оставить комментарий]