listes à puces pour les documents en texte brut dans Vim

8

Alors que Vim prend en charge l'indentation automatique dans les listes, le paramètre par défaut ne couvre que les listes ordonnées, en commençant par des chiffres, tels que:

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.

Je n'ai pas été en mesure de comprendre comment étendre cela à des listes à puces non ordonnées, telles que:

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

Changer le formatlistpatRegEx n'a pas conduit aux résultats escomptés (en effet, il a même cassé les listes ordonnées).

AnC
la source

Réponses:

10

Savoir à quoi vous avez essayé de définir la valeur aiderait, mais je suppose que vous n'avez pas correctement échappé aux barres obliques inverses.

La valeur par défaut est

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

mais pour définir cette valeur (dans votre vimrc ou sur la ligne de commande), vous devez utiliser

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

Ceci est expliqué dans :help option-backslash. Une simple modification pour permettre formatlistpatde travailler avec *des listes délimitées et non ordonnées serait

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
jamessan
la source
En effet, cela fonctionne - merci beaucoup! Je pensais que j'avais correctement échappé à tout (même réduit la complexité du motif), mais apparemment j'avais tort. J'aurais peut-être échappé aux astérisques, ce qui expliquerait mes ennuis ...
AnC
2
Comme expliqué dans l'aide car []il est plus rapide à utiliser [[:digits:]*]ou [\d*]plutôt[0-9*]
Aditya
On pourrait contourner la question en citant à l'aide letplutôt que set, par exemple: let &formatlistpat='^\s*\(\d\+[\]:.)}\t ]\|[*-][\t ]\)\s*'. (Cela ajoute le support pour *et en -tant que puces, en plus des nombres.)
wjv
@wjv J'ai essayé votre solution et elle fonctionne pour les - listes, mais pas avec les astérisques. Une idée de ce qui pourrait causer cela?
languitar
@wjv semble que le * à l'intérieur de la commentsvariable, bien qu'il soit la partie centrale d'un commentaire en trois parties, permet à vim de confondre l'astérisque avec un commentaire de ligne.
languitar
3

En plus de ce que jamessan a écrit (en particulier sa formatlistpatsuggestion de travailler avec des listes *), il est important de désactiver l' option 'c' (formatage des commentaires) dans formatoptions:

set formatoptions-=c

sinon, Vim est confus entre le formatage des listes à puces * et le formatage des commentaires. Vous vous retrouvez avec un extra * sur la 2e et les lignes suivantes.

Blixtor
la source
Non seulement cela, mais l' indicateur q(autoriser la mise en forme des commentaires avec gq) formatoptionspeut provoquer des problèmes lors du formatage avec gq. +1
Kazark
1

J'ai eu du mal à obtenir des listes comme a)reconnues, alors je posterai ma solution ici:

" 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
la source
1

J'écris une nouvelle réponse à cette question parce que j'ai dû combiner plusieurs réponses de cette question et de cette autre question pour que cela fonctionne. Voici ma configuration finale.

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