Что: 888573d42b011c54fced0339adc79969fface36d
Когда: 2017-05-19 19:24:45+03:00
Темы: 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 предоставляет все ручки управления для идеального поведения и решения двух проблем с этими списками у меня. А я думал что небось придётся делать какое-нибудь переопределение команды форматирования, где я удалю эту звёздочку, сделаю форматирование и снова её поставлю. То есть просто автоматизирую то, что делал руками.