Vim: перенос текста ("gq") без изменения подчеркнутых заголовков - PullRequest
6 голосов
/ 21 апреля 2010

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

В Markdown есть два способа представления заголовков:

#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.Я изучил документацию для par , и, несмотря на то, что он очень мощный, похоже, что это не одна из его особенностей.Поэтому мне интересно, есть ли другая внешняя программа, которая могла бы использоваться с formatprg, которая понимает уценку, или это можно сделать вместо этого, используя vimscript с настройкой formatexpr.

Ответы [ 2 ]

6 голосов
/ 22 апреля 2010

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

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

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

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

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

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

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

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

:h comments
:h format-comments
:h formatoptions
:h fo-table
0 голосов
/ 21 апреля 2010

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

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

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

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

НТН

...