web-dev-qa-db-fra.com

Comment puis-je plier automatiquement toutes les fonctions dans un fichier avec vim?

Au début, j'utilise le marqueur set foldmethod =, et déplace le curseur sur le {d'une fonction, utilise le zf% pour plier la fonction actuelle. Mais il y a beaucoup de fonctions dans ce fichier. Comment puis-je plier toutes les fonctions de ce fichier? Et je ne veux pas replier {} dans les fonctions.

47
Yongwei Xing

Si vous :set foldmethod=syntax les plis seront spécifiés à partir des définitions de syntaxe. Si vous préférez, vous pouvez :set foldmethod=indent pour que l'indentation définisse les plis.

Vous pouvez fermer tous les plis avec zM. Si vous avez des plis imbriqués et que vous souhaitez plier niveau par niveau, utilisez zm. Pour ouvrir les plis, utilisez zR (tout) et zr (niveau par niveau).

97

Si chaque fonction a son accolade ouvrante sur la première colonne, vous pouvez faire:

:%g/^{/normal! zf%

C'est peut-être plus clair de cette façon:

:%g /^{/ normal! zf%

la commande g sélectionne les lignes selon le modèle suivant et exécute une commande ex (ici normal! pour jouer les frappes en mode normal).

Voir :help :g et :help :normal

8
Benoit

Je suis tombé sur cela lorsque je cherchais une chose similaire. Vous auriez évidemment compris cela maintenant, mais pour le bénéfice d'autres personnes, je vais y répondre de toute façon.

Vous devez mettre les lignes suivantes dans votre .vimrc:

set foldmethod=syntax
set foldnestmax=1
7
pavan
set foldlevel=0

pliera tout dès le début, ce qui est censé être plié. En fonction de la langue et de votre fonction de pliage, le contenu du pli varie.

5
Rook

J'essayais de faire de même et j'ai fini par faire simplement:

setlocal foldmethod=marker
setlocal foldmarker={,}

Il utilise la méthode du pli du marqueur et change le marqueur en une seule accolade bouclée (par défaut, le marqueur est {{{).

4
mrtnmgs

Essayez :%g/\(function\_.\{-}\)\@<={/ normal! f{zf%

Expliquez petit à petit:

:%g - recherche globale dans un fichier entier

/\(function\_.\{-}\)\@<={/ - modèle pour trouver le premier '{' après n'importe quelle 'fonction' et placer le curseur au début de la chaîne avec ce '{'

normal! f{zf% - exécutez vers l'avant vers '{' f{ Et effectuez le pliage avec le déplacement '%' zf% Sur cette chaîne

1
Zanshee