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

Відповіді:


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*

Дійсно, що працює - велике спасибі! Я думав, що правильно уникнув усього (навіть зменшив складність візерунка), але, мабуть, помилявся. Я, можливо, уникнув зірочок, що пояснило б мої неприємності ...
AnC

2
Як пояснюється в довідці []це швидше використання [[:digits:]*]або [\d*]замість[0-9*]
Адітья

Можна обійти квотування проблему, використовуючи letзамість того set, наприклад: let &formatlistpat='^\s*\(\d\+[\]:.)}\t ]\|[*-][\t ]\)\s*'. (Це додає підтримку *і -як кулі, крім номерів.)
wjv

@wjv Я спробував ваше рішення, і він працює для - списків, але не зірочками. Будь-яка ідея, що може спричинити це?
languitar

@wjv здається, що * всередині commentsзмінної, незважаючи на те, що є середньою частиною тричастинного коментаря, дозволяє vim плутати зірочку з коментарем рядка.
languitar

3

На додаток до того, що написав jamessan (зокрема його formatlistpatпропозиція щодо роботи зі списками *), важливо, щоб параметр 'c' (форматування коментарів) було знято у formatoptions:

set formatoptions-=c

інакше Vim плутається між форматуванням * маркованих списків та форматуванням коментарів. Ви закінчуєте додатковий * у другому та наступному рядках.


Мало того, але прапор q(дозволити форматування коментарів за допомогою gq) formatoptionsпрапора може спричинити проблеми при форматуванні з gq. +1
Kazark

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\\+

1

Я пишу нову відповідь на це питання, тому що мені довелося поєднувати кілька відповідей з цього питання та цього іншого питання, щоб зробити цю роботу. Ось моя остаточна конфігурація.

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
set formatoptions-=c
set comments-=mb:*
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.