Comment reproduire le pliage du code Vim?

28

Pliage de code dans Emacs

Parfois, je veux plier un bloc de texte. Dans Vim, vous avez un pliage facile sans fuzz. Sans ajouter de caractères spéciaux comme des "marqueurs" ou des expressions rationnelles spécifiques comme {{{. Je voudrais sélectionner une région et la plier, sans gâcher la structure.

En regardant autour, il semble qu'il y avait déjà des questions sur le pliage de code dans Emacs. Quelqu'un a dit qu'il n'y avait "pas de solution parfaite". Par exemple, j'ai créé un clip de pliage de code simple dans Vim:

Pliage uni Vim

entrez la description de l'image ici

+ Assez simple, sélectionnez une région et pliez-la.
+ C'est persistant. Lorsque vous tuez le tampon / fermez Vim. Et rouvrez le fichier, les plis sont toujours là.
+ Vous obtenez une barre de surbrillance, pour voir facilement ce qui est plié.

Il existe de nombreuses autres configurations de pliage pour Vim. Je suis content avec Emacs, mais c'est une chose qui me manque. Autres alternatives que j'ai essayées, par exemple HideShow:

HideShow

entrez la description de l'image ici

L'alternative du mal avec hide-show minor mode. Je l'ai trouvé inutilisable:

- Je ne parviens pas à sélectionner une région et à la plier. Il se replie sur des blocs de code.

- Il n'y a pas de bar ou quelque chose comme ça, pour vous assister c'est plié. Vous pourriez facilement le manquer.

- Ce n'est pas persistant. Si vous rouvrez le fichier, les plis ont disparu.

Il y a un autre paquet, pliez ceci :

Pliez ceci

entrez la description de l'image ici

- C'est une jolie alternative. Cependant, cela gâche l'indentation, car le texte sous le pli est placé à côté du pli ... (?).

- Il est capable de sélectionner visuellement la région et de la plier. Mais cela brise l'indentation, de sorte que l'aperçu est foiré. Pas très pratique.

- Il n'y a pas de bar ou quelque chose comme ça, pour vous assister c'est plié. Vous pourriez facilement le manquer.

Quel est le problème?

Je voudrais répliquer comment Vim fait le pliage. Mais quand j'ai cherché autour, il semble que c'est très difficile de le faire dans Emacs. Je me demande donc s'il y a quelque chose dans emacs ou son architecture qui rend difficile la réplication? Quelles sont les limites?

ReneFroger
la source
2
J'estimais que la question était trop large, j'ai donc voté la clôture sur cette base. Je recommanderais à l'affiche originale de choisir quelques bibliothèques qui fournissent certaines des fonctionnalités recherchées, puis de les combiner / modifier comme vous le souhaitez. Si l'OP rencontre des problèmes pour implémenter / modifier une fonctionnalité particulière , postez une question spécifique limitée à ce seul problème. L'OP peut probablement obtenir les effets visuels souhaités, mais doit être prêt à en faire un projet en cours sur lequel travailler au fil du temps.
lawlist
3
Pourriez-vous expliquer les fonctionnalités de pliage que vous souhaitez? En règle générale, vous ne pouvez pas vous attendre à ce que les gens sur ce site sachent comment fonctionne le pliage de code Vim, et de toute façon vous devez nous dire quelles fonctionnalités vous souhaitez spécifiquement. La seule information que vous fournissez sur ce que vous voulez est une animation qui ne montre qu'un exemple, et de toute façon je n'ai aucune idée de ce qu'elle illustre: ils ne montrent pas quelles commandes vous avez utilisées, pourquoi vous avez déplacé le curseur à tel ou tel endroit, etc. De plus, dans un navigateur typique, ils jouent en boucle et il est impossible de dire quand une répétition commence.
Gilles 'SO- arrête d'être méchant'
3
la cale doit être supprimée de cette question. dans sa forme actuelle, il est raisonnablement spécifique. ne pas avoir de réponse à la question n'est pas une bonne raison de la fermer.
Ista
2
ar-hide-region-atpt, ar-show-region-atpt de 'thing-at-point-utils.el', github.com/andreas-roehler/thing-at-point-utils - veuillez débloquer afin que pourrait être une réponse régulière.
Andreas Röhler
1
La question, si je comprends bien, est essentiellement: " Quelqu'un: Veuillez écrire une bibliothèque entière pour Emacs qui fournira les fonctionnalités exactes de pliage de code trouvées dans Vim. " Je vois dans certains commentaires et votes positifs qu'il y a suffisamment les gens qui aimeraient que cela devienne une réalité. Cependant, je ne vois pas comment cela pourrait raisonnablement entrer dans la réponse - la nouvelle bibliothèque proposée devra être maintenue, avec des problèmes et des corrections de bugs. Cela ne me dérangerait pas non plus que quelqu'un rédige une bibliothèque entière avec de nouvelles fonctionnalités intéressantes pour le pliage de code.
lawlist

Réponses:

16

Essayez vimish-fold.

traits

  • piles incluses: activer le mode mineur, lier quelques commandes et tout fonctionnera simplement;

  • cela fonctionne sur les régions que vous sélectionnez;

  • c'est persistant: lorsque vous fermez un fichier, vos plis ne disparaissent pas;

  • en plus d'être persistant, il évolue bien, vous pouvez travailler sur des centaines de fichiers avec beaucoup de plis sans effets indésirables;

  • il est évident quelles parties du texte sont pliées;

  • il ne rompt pas l'indentation ou quelque chose;

  • il peut replier simplement les plis dépliés (oh, mon);

  • pour les fans de avypackage: vous pouvez utiliser avypour plier du texte avec un nombre minimal de touches!

Usage

Créez une liaison pour certaines de / toutes ces fonctions:

  • vimish-fold - pliage de base de la région sélectionnée;

  • vimish-fold-unfold- vous n'avez pas vraiment besoin de lier cela, utilisez simplement C-glorsque le point est placé sur l'en-tête représentant le texte plié;

  • vimish-fold-unfold-all - néanmoins cela peut être utile;

  • vimish-fold-refold - oui, vous pouvez le replier;

  • vimish-fold-avy- utilisez avypour plier votre texte!

Vous pouvez activer vimish-fold-modesélectivement les modes dans lesquels vous souhaitez avoir un pliage persistant, ou simplement l'activer partout:

(vimish-fold-global-mode 1)
Mark Karpov
la source
avez-vous des raccourcis clavier suggérés? Quelles liaisons utilisez-vous lorsque vous êtes en mode C ++? Mode C? Mode Python? Mode Lisp? Mode ELisp? Mode JavaScript?
Reb.Cabin
1
@ Reb.Cabin, ce n'est pas un package spécifique au mode, donc les liaisons de clés globales sont le meilleur choix. J'utilise des raccourcis clavier qui n'impliquent pas d'accords clés et la plupart des gens les trouveraient un peu étranges, actuellement j'ai: menu v fvimish-fold, menu v avimish-fold-avy, menu v uvimish-fold-unfold-all, menu v vvimish-fold-refold. La plupart de mes raccourcis clavier sont comme ça, c'est ma configuration .
Mark Karpov
Est-ce que cela s'intègre aux mouvements et aux objets texte maléfiques?
PythonNut du
1
Hm ... Je vais commencer à travailler sur un PR.
PythonNut du
1
Pour ma part, je trouve le pli vimish complètement inutilisable. C'est peut-être intuitif pour ceux qui connaissent déjà le pliage de code dans vim ... Je ne sais pas. De plus, je ne comprends pas pourquoi le pliage en mode org fonctionne si bien, mais Emacs n'a pas encore un bon pliage de code ...
kjo