2010-04-21 3 views
6

Есть ли способ форматирования текста в Vim, который соответствует подчеркнутым заголовкам?Vim: wrap text ("gq") без изменения подчеркнутых заголовков

В 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.

ответ

6

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

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

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

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

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

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

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

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

:h comments 
:h format-comments 
:h formatoptions 
:h fo-table 
+0

Это кажется хакерским, но до тех пор, пока флаг 'q' включен в настройку' formatoptions', он отлично работает. Мои строки подчеркивания обычно соответствуют длине текста в строке выше, поэтому я использовал настройку размера переменной. Спасибо за помощь. В дополнение к справочным ссылкам, указанным в ответе, я нашел это полезным: [': help 30.6'] (http://vimdoc.sourceforge.net/htmldoc/usr_30.html#30.6) – nelstrom

0

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

E.g. ПОлОжЕНИЕ текста как-то на первом пункт с поиском первого заголовком-подчеркивание затем двигаться вниз 2 линии, а затем visuallí выбрать область к следующему подчеркиванию минус 3 линии, а затем отформатировать его:

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

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

НТН