Vim: перенесите текст (“GQ”), не изменяя подчеркнутые заголовки

Существует ли способ отформатировать текст в Vim, который уважает подчеркнутые заголовки?

В Скидке с цены существует два способа представить заголовки:

#Level 1 heading
##Level 2 heading
###Level 3 heading

и для уровня 1 и 2 только:

Level 1 heading
===============

Level 2 heading
---------------

Я люблю стиль подчеркивания, поскольку я думаю, что он читает лучше.

Когда я составляю скидку с цены в Vim с, скажем, :set textwidth=72, Я хотел бы смочь переформатировать весь документ с gggqG, но это рассматривает эти подчеркнутые заголовки как абзацы и сжимает их вместе на одну строку. Таким образом, если я запустил со следующего:

Lorem ipsum
===========

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 

После выполнения gq на всем проходе я закончил бы с чем-то вроде этого:

Lorem ipsum ===========

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. 

Есть ли какой-либо способ, которым я могу препятствовать тому, чтобы Vim форматировал подчеркнутые заголовки?

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

6
задан nelstrom 21 April 2010 в 11:45
поделиться

2 ответа

Один из вариантов, который работает sorta , - это добавить строки подчеркивания к переменной comments .

Если подчеркнутые строки имеют фиксированный размер, вы можете добавить только эти:

:set comments+=:---------------,:===============

Если они переменного размера (более одного):

:set comments+=n:--,n:==

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

Удалите + выше, чтобы добавить комментарии только к этим строкам, а не добавлять их.

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

:h comments
:h format-comments
:h formatoptions
:h fo-table
6
ответ дан 17 December 2019 в 02:25
поделиться

По крайней мере, вы можете настроить для него какой-нибудь макрос.

Например. расположите текст каким-либо образом в первом абзаце с поиском первого заголовка-подчеркивания, затем переместитесь на 2 строки вниз, затем визуально выберите область до следующего подчеркивания минус 3 строки, затем отформатируйте его:

qa/^===========$/jjv/^===========$/-3<CR>gqq

Теперь вы можете использовать свой макрос .

HTH

0
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: