Comment puis-je définir foldlevelstart dans vim pour ne rien plier au départ, tout en permettant à zr de fonctionner immédiatement?

8

Dans vim, je règle généralement foldmethodà indentla plupart des types de fichiers. En général, j'aime que les fichiers s'ouvrent avec tous les plis ouverts. Cependant, il est utile de commencer immédiatement à utiliser zmpour commencer à fermer les plis globalement à travers le fichier, un niveau à la fois, ce qui me permet de voir la structure globale du fichier sans que des détails ne gênent.

La seule solution générale que j'ai trouvée consiste à définir foldlevelstartun nombre très élevé, par exemple 99, pour s'assurer que tous les fichiers (en gardant à l'esprit que différents fichiers auront différents niveaux de retrait maximum) commencent complètement dépliés. Cependant, je devrais ensuite utiliser à zmplusieurs reprises pour réduire foldlevelle niveau de pliage maximum du fichier, normalement beaucoup moins que 99, ce qui est lourd et peu pratique. Je pouvais définir foldlevelmanuellement à l'aide de la ligne de commande vim, mais j'avais encore besoin de connaître le retrait maximal dans le fichier.

Existe-t-il un moyen pratique d'ouvrir un fichier dont la valeur foldlevelest exactement égale à un de plus que le niveau de retrait / pli maximal actuel dans le fichier lui-même?

Par exemple, étant donné le fichier suivant:

a
  b
    c
      d1
      d2
    e
      f1
      f2

La première pression sur zmafficherait ceci:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(Notez, cependant, que cela devrait fonctionner pour le cas général où le retrait maximal initial du fichier pourrait être n'importe quelle valeur).

Andrew Ferrier
la source
1
Vous confondez zravec zm; ce dernier réduit le niveau de pliage.
Ingo Karkat
@IngoKarkat, vous avez raison, je le suis. Désolé pour la confusion - je trouve toujours ces combinaisons de touches contre-intuitives. J'ai corrigé ma question.
Andrew Ferrier
"Je trouve toujours ces combinaisons clés contre-intuitives." Il est censé signifier zm= plier plus (soustraire le niveau de pli) et zr= plier moins (ajouter le niveau de pli)
wisbucky

Réponses:

9

Cela trouve le niveau de pliage le plus élevé dans le fichier actuel:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

Pour définir cela automatiquement, vous pouvez utiliser un :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))
Ingo Karkat
la source
1
Ingo, parfait, c'est exactement ce que je cherchais. Merci. La honte foldlevelstartn'a pas une telle option.
Andrew Ferrier
Cela ne semble pas fonctionner sur Cygwin Vim. Mon foldlevelest 0 et foldlevelstart-1 lorsque je lance un fichier avec ces paramètres.
CMCDragonkai
0

Au lieu d'utiliser zr, utilisez zR, qui ouvrira tous les plis. De même, zMfermera tous les plis.

garyjohn
la source
Gary, merci. C'est proche, mais ne fait pas ce que je décris. Je voudrais une commande qui réduit le niveau de pliage juste d'un, mais à partir du niveau de pliage maximum correspondant au fichier en question. Pour ce faire, je devrais utiliser zM pour réduire le niveau de pliage à 0, puis zr à plusieurs reprises pour ouvrir plus de détails. Je recherche une combinaison commande / touche.
Andrew Ferrier
2
Vous pouvez le faire zR(définir le niveau de pliage au niveau le plus élevé), puis zmfonctionnera. Ce n'est qu'une étape supplémentaire.
wisbucky
0

L'option set nofoldenablevous permet de démarrer le fichier avec tous les plis ouverts

HarshaNadimpalli
la source
Ce n'est pas la question que j'ai posée. Je veux que le pliage soit activé.
Andrew Ferrier