маркированные списки для текстовых документов в Vim

8

Хотя Vim поддерживает автоматическое отступление в списках, настройка по умолчанию охватывает только упорядоченные списки, начиная с цифр, например:

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

Я не смог выяснить, как распространить это на неупорядоченные, маркированные списки, такие как:

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

Изменение formatlistpatRegEx не привело к желаемым результатам (действительно, оно даже сломало упорядоченные списки).

AnC
источник

Ответы:

10

Знание того, на что вы пытались установить значение, могло бы помочь, но я предполагаю, что вы не избежали обратной косой черты.

Значением по умолчанию является

formatlistpat=^\s*\d\+[\]:.)}\t ]\s*

но чтобы фактически установить это значение (в вашем vimrc или на cmdline), вы должны использовать

set formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s*

Это объясняется в :help option-backslash. Простая модификация, позволяющая formatlistpatработать с *неупорядоченными списками с разделителями, будет

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
jamessan
источник
Действительно, это работает - большое спасибо! Я думал, что правильно избежал всего (даже уменьшил сложность паттерна), но, очевидно, я был неправ. Я мог бы избежать звездочек, которые объяснили бы мои проблемы ...
AnC
2
Как поясняется в справке []это быстрее использования [[:digits:]*]или [\d*]вместо[0-9*]
Адитья
Можно обойти квотирование проблему, используя letвместо того set, например: let &formatlistpat='^\s*\(\d\+[\]:.)}\t ]\|[*-][\t ]\)\s*'. (Это добавляет поддержку *и -как маркеры, в дополнение к числам.)
wjv
@wjv Я попробовал ваше решение, и оно работает для списков, но не со звездочками. Есть идеи, что может вызвать это?
Том
@wjv кажется * внутри commentsпеременной, несмотря на то, что он является средней частью комментария, состоящего из трех частей, vim путает звездочку с строчным комментарием.
Том
3

В дополнение к тому, что написал jamessan (в частности, его formatlistpatпредложение по работе со * списками), важно, чтобы опция 'c' (форматирование комментариев) была отключена в formatoptions:

set formatoptions-=c

в противном случае Vim запутается между форматированием * маркированных списков и форматированием комментариев. Вы получите дополнительный * на 2-й и последующих строках.

Blixtor
источник
Кроме того, флаг q(разрешить форматирование комментариев с помощью gq) formatoptionsможет вызвать проблемы при форматировании с помощью gq. +1
Казарк
1

У меня были некоторые проблемы с получением списков, таких как a)распознанные, поэтому я опубликую свое решение здесь:

" Recognise lists like 1), 1., a), a., and so on
" Note that | need to be escaped AND preceeded by a literal backslash
set formatlistpat=^\\s*\\([0-9]\\+\\\|[a-z]\\)[\\].:)}]\\s\\+
RobM
источник
1

Я пишу новый ответ на этот вопрос, потому что мне пришлось объединить несколько ответов из этого вопроса и этого другого вопроса, чтобы сделать эту работу. Вот моя окончательная конфигурация.

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
set formatoptions-=c
set comments-=mb:*
merlin2011
источник