Je suis fan de la façon dont Atom et Sublime Text gèrent le pliage de ligne, où la première ligne de chaque pli est visible (avec mise en évidence de la syntaxe), et un marqueur est ajouté à la fin de la ligne qui indique le pli.
Voir la capture d'écran ci-dessous comparant le pliage en retrait de Vim (en haut) à celui d'Atom (en bas):
Vim consacre deux lignes pour chaque pli. La première ligne sert d'en-tête et la deuxième ligne décrit certaines informations sur le pli (nombre de lignes et texte à l'intérieur du pli).
Atom n'utilise qu'une seule ligne et utilise un petit marqueur à la fin de la ligne pour indiquer le pli, ainsi que la couleur ajoutée aux numéros de ligne à gauche. Le style de pliage d'Atom utilise moins d'espace d'écran mais communique toujours toutes les informations dont j'ai vraiment besoin.
Je suis amateur du style de pliage Atom. Cela semble plus propre et plus cohérent, à mon avis, en particulier lors de la liste de plusieurs méthodes ou attributs dans une rangée (comme dans la capture d'écran ci-dessus).
Existe-t-il un moyen d'approcher approximativement le style de pliage d'Atom dans Vim?
from __future__ import braces
) ... Comment avez-vous configuré le pliage? Et pouvez-vous coller cet extrait de code (ou un autre qui illustre le problème)? Vim se replie sur une seule ligne, mais comme Muru l'a mentionné, vos plis commencent une ligne en retard.Réponses:
Deux lignes contre une ligne
Dans Vim, toutes les lignes d'un pli seront réduites en une seule ligne, et l'
'foldtext'
option détermine ensuite le synopsis de ces lignes (généralement des tirets, le nombre de lignes pliées et le contenu de la première (ou de toutes) les lignes).Dans votre exemple, dans Vim, seul le
{...}
bloc de paramètres lui-même est plié; la ligne ci-dessus (qui utilise les paramètres) ne fait pas partie du pli. En revanche, dans l'autre éditeur, cette ligne utilisant les paramètres appartient au pli, et son texte de pliage (pour utiliser la terminologie Vim) est le contenu de cette ligne plus le marqueur ajouté.L'adaptation
Dans Vim, les plis peuvent être générés par différents moyens (voir
:help fold-methods
), et dépendent'filetype'
du tampon. La difficulté d'inclure la ligne ci-dessus dans le pli en dépend; vérifier avec:setlocal foldmethod?
. Avec le pliage en retrait , vous ne pouvez rien influencer; vous devez passer à une autre méthode. Pour le pliage de syntaxe , cela signifierait adapter les définitions de syntaxe, et pourrait être très délicat. Vous aurez plus de chance si une expression est utilisée, mais cela signifierait quand même comprendre et changer la logique. (Il est peu probable que l'auteur du plugin de type de fichier ait fourni une configuration pour influencer cela.)Mise en évidence de la syntaxe de la ligne pliée
Ce n'est malheureusement pas possible du tout. Vim utilise toujours le
Folded
groupe de surbrillance pour toute la ligne pliée. Vous pouvez modifier cela via des:highlight
commandes dans votre~/.vimrc
, mais la différenciation individuelle de la syntaxe sera perdue.la source
Vim affiche déjà les plis sur une seule ligne. Cependant, dans le
indent
pliage de Vim , toutes les lignes qui ont le même retrait sont incluses dans un pli. Ainsi, dans votre capture d'écran, les lignes que vous appelez "en-têtes" (par exemple, celle qui commencecollection_base_url
) ne sont pas dans les plis.Vous pouvez obtenir quelque chose de similaire au pliage d'Atom en utilisant Vim
foldexpr
foldmethod
:Cela définit une expression de repli (voir
:help fold-expr
) comme suit:"<N"
, où N est défini sur le retrait. Cela indique à Vim qu'un pli de niveau N se termine sur cette ligne.Mise à jour
@alxndr demande dans les commentaires s'il est possible d'étendre ceci pour inclure les excentriques de Ruby
end
dans les plis. Vous pouvez commencer par remplacer la" Calculate indent level
section par ce qui suit:En l'état, ce n'est pas la solution la plus robuste (par exemple, elle échouera si l'
end
instruction est sur la même ligne, après un point-virgule). Vous pouvez modifier l'expression régulière et le code environnant pour résoudre ce problème, mais comme vous êtes maintenant dans le domaine de l'analyse de la syntaxe réelle du fichier, je soupçonne que les choses pourraient devenir beaucoup plus compliquées avant d'avoir une bonne solution.la source
end
pour terminer un bloc?...
à la fin de la ligne comme symbole d'un bloc de texte plié très utile et fait moins de distraction que de mettre en évidence toute la première ligne du bloc de texte comme dans vim. J'ai essayé votre pli ci-dessus avec le comportement de pli par défaut de vim, simple ne fonctionne pas. Comment avoir un pli qui donne une marque à la fin de la première ligne du bloc de texte avec python? Dois-je ouvrir une nouvelle question? Je viens de tester à nouveau votre pli, il fonctionne en effet très bien avec la ligne de retrait. Merci beaucoup.