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

2615
AnC

Хотя 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 не привело к желаемым результатам (действительно, оно даже сломало упорядоченные списки).

8

4 ответа на вопрос

10
jamessan

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

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

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

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

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

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

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

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

set formatoptions-=c 

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

И не только это, но и флаг `q` (разрешить форматирование комментариев с помощью` gq`) `` formatoptions` может вызвать проблемы при форматировании с помощью `gq`. +1 Kazark 11 лет назад 0
1
RobM

У меня были некоторые проблемы с получением списков, как 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\\+ 
1
merlin2011

I am writing a new answer to this question because I had to combine multiple answers from this question and this other question to make this work. Here is my final configuration.

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s* set formatoptions-=c set comments-=mb:*