Question

Dites que j'ai une ligne dans un tampon emacs qui ressemble à ceci:

foo -option1 value1 -option2 value2 -option3 value3 \
    -option4 value4 ...

Je veux que ça ressemble à ceci:

foo -option1 value1 \
    -option2 value2 \
    -option3 value3 \
    -option4 value4 \
    ...

Je veux chaque paire option / valeur sur une ligne séparée. Je veux également que les lignes suivantes soient mises en retrait de manière appropriée selon le mode plutôt que d'ajouter une quantité fixe d'espaces. Je préférerais que le code fonctionne sur le bloc actuel, en s'arrêtant à la première ligne non vide ou à la ligne ne contenant pas de paire option / valeur, bien que je puisse me contenter de le faire fonctionner dans une région sélectionnée.

Quelqu'un connait-il une fonction elisp pour faire cela?

Était-ce utile?

La solution

Comme personne n’avait ce que je cherchais, j’ai décidé de dépoussiérer mon manuel elisp et de le faire moi-même. Cela semble fonctionner assez bien, bien que la sortie ne corresponde pas exactement à ce que j'avais demandé. Dans cette version, la première option consiste à mettre une ligne à part au lieu de rester sur la première ligne comme dans ma question initiale.

Autres conseils

Dans ce cas, j'utiliserais une macro. Vous pouvez commencer à enregistrer une macro avec C-x (et arrêter de l’enregistrer avec C-x). Lorsque vous souhaitez rejouer le type de macro C-x e.

Dans ce cas, je taperais C-a C-x (C-v v u l e C-f C-f \ RET SPC SPC SPC SPC C-x)

Cela enregistrerait une macro qui recherche la "valeur", avance de 2, insère une barre oblique et une nouvelle ligne, et enfin, espère que la nouvelle ligne s’alignera. Ensuite, vous pourrez répéter cette macro plusieurs fois.

EDIT: Je viens de me rendre compte que votre texte littéral n'est peut-être pas aussi facile à rechercher que "valeur1". Vous pouvez également rechercher des espaces et parcourir les résultats. Par exemple, frappez C-s plusieurs fois après le premier match pour ignorer certains matchs.

Remarque: votre exemple étant "ad-hoc". cette solution sera aussi. Vous utilisez souvent des macros lorsque vous avez besoin d'une solution ad hoc. Une façon de rendre la macro plus cohérente consiste à placer la déclaration d'origine sur une seule ligne (cette opération peut également être effectuée manuellement ou manuellement).

EDIT: Merci pour le commentaire à propos de (versus C- (vous aviez raison de mon erreur!

Personnellement, je fais des trucs comme ça tout le temps.

Mais je n'écris pas de fonction pour le faire à moins que je ne le fasse chaque jour pendant un an.

Vous pouvez facilement le faire avec query-replace, comme ceci:

m-x (requête-remplacement "-option" "^ Q ^ J -option")

Je dis ^ Q ^ J, car c’est ce que vous allez taper pour citer une nouvelle ligne et le mettre dans la chaîne.

Ensuite, appuyez simplement sur «y» pour remplacer les chaînes et sur «n» pour ignorer la bizarrerie. cas de coin que vous trouveriez.

Une autre fonction impitoyable est query-replace-regexp qui peut le faire remplacements d'expressions régulières.

et aussi grep-query-replace, qui effectuera une requête de remplacement par analyse la sortie d'une commande grep. Ceci est utile car vous pouvez rechercher pour " foo " dans 100 fichiers, puis faites la requête-replace à chaque occurrence sauter de fichier en fichier.

Votre mode peut déjà supporter cela. En mode C et en mode Makefile, au moins M-q (fill-paragraph) insérera des continuations de ligne dans la colonne de remplissage et enveloppera vos lignes.

Dans quel mode éditez-vous cela?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top