wypunktowane listy dokumentów tekstowych w Vimie

8

Podczas gdy Vim obsługuje automatyczne wcięcia na listach, ustawienie domyślne obejmuje tylko listy uporządkowane, zaczynając od cyfr, takich jak:

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.

Nie byłem w stanie dowiedzieć się, jak rozszerzyć to na nieuporządkowane, wypunktowane listy, takie jak:

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

Zmiana formatlistpatRegEx nie przyniosła pożądanych rezultatów (w rzeczywistości nawet złamała uporządkowane listy).

AnC
źródło

Odpowiedzi:

10

Znajomość tego, na co próbowałeś ustawić wartość, pomogłaby, ale zgaduję, że nie uniknąłeś właściwie odwrotnego ukośnika.

Wartość domyślna to

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

ale aby faktycznie ustawić tę wartość (w vimrc lub w cmdline) musisz użyć

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

To jest wyjaśnione w :help option-backslash. Byłaby to prosta modyfikacja umożliwiająca formatlistpatpracę z *ograniczonymi, nieuporządkowanymi listami

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
jamessan
źródło
Rzeczywiście, to działa - wielkie dzięki! Myślałem, że właściwie wszystko uniknąłem (nawet zmniejszyłem złożoność wzoru), ale najwyraźniej się myliłem. Mógłbym uciec przed gwiazdkami, co tłumaczyłoby moje problemy ...
AnC
2
Jak wyjaśniono w pomocy za []to szybciej do użytku [[:digits:]*]lub [\d*]zamiast[0-9*]
Aditya
Można pominąć kwestię cytowania, używając letzamiast set, np let &formatlistpat='^\s*\(\d\+[\]:.)}\t ]\|[*-][\t ]\)\s*'. : (To dodaje obsługę *i -jako punktory, oprócz liczb.)
wjv
@ wjv Wypróbowałem twoje rozwiązanie i działa ono z listami, ale nie z gwiazdkami. Masz pojęcie, co może to spowodować?
languitar
@wjv wydaje się * wewnątrz commentszmiennej, mimo że jest środkową częścią trzyczęściowego komentarza, pozwala vimowi pomylić gwiazdkę z komentarzem liniowym.
languitar
3

Oprócz tego, co napisał jamessan (w szczególności jego formatlistpatsugestia dotycząca pracy z * listami), ważne jest, aby mieć wyłączoną opcję „c” (formatowanie komentarza) w formatoptions:

set formatoptions-=c

w przeciwnym razie Vim pomyli się między formatowaniem * list wypunktowanych a formatowaniem komentarzy. Skończysz z dodatkowym * w drugim i kolejnych wierszach.

Blixtor
źródło
Ponadto flaga q(zezwalaj na formatowanie komentarzy za pomocą gq) formatoptionsmoże powodować problemy podczas formatowania za pomocą gq. +1
Kazark
1

Miałem pewne problemy z uzyskaniem list takich jak a)rozpoznane, więc opublikuję tutaj moje rozwiązanie:

" 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
źródło
1

Piszę nową odpowiedź na to pytanie, ponieważ musiałem połączyć wiele odpowiedzi z tego pytania i drugiego pytania, aby to zadziałało. Oto moja końcowa konfiguracja.

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
set formatoptions-=c
set comments-=mb:*
merlin2011
źródło