Jolie impression des fichiers XML sur Emacs
J'utilise emacs pour éditer mes fichiers xml (nxml-mode) et les fichiers ont été générés par la machine n'ont pas assez mise en forme des balises.
J'ai cherché pour la jolie impression de la totalité du fichier avec l'indentation et l'enregistrer, mais n'était pas en mesure de trouver une manière automatique.
Est-il un moyen? Ou au moins certains de l'éditeur sur linux qui peut le faire.
Vous devez vous connecter pour publier un commentaire.
- Je utiliser mode nXML pour l'édition et la Bien rangé quand je veux formater et de retrait XML ou HTML. Il est également une interface Emacs pour Ranger.
wrong type argument: stringp, nil
Vous n'avez même pas besoin d'écrire votre propre fonction - sgml-mode (gnu emacs module de base) a une jolie impression de la fonction appelée (sgml-pretty-print ...), ce qui prend de la région de début et de fin arguments.
Si vous êtes le découpage et le collage xml et que vous trouvez votre terminal découper les lignes dans des emplacements arbitraires vous pouvez utiliser cette jolie imprimante qui fixe des lignes brisées en premier.
sgml-mode
peut avoir changé au fil du temps. Aujourd'hui, j'ai invoquéC-x C-f foo.xml
,M-x sgml-mode
, puisM-x sgml-pretty-print
et mon fichier xml obtenu de jolis imprimés. (Eh bien, emacs pendu pendant vingt secondes ou plus avant de se terminer. C'était une ligne d'un fichier avant de le pretty print et 720 lignes après.)C-x g
pour sélectionner l'ensemble de la mémoire tampon d'une région.C-x h
et puisM-x sgml-pretty-print
. Le xml sera assez formaté maintenantSi vous avez seulement besoin d'assez de mise en retrait sans introduire de nouveaux sauts de lignes, vous pouvez appliquer la
indent-region
de commande de la mémoire tampon entier avec ces touches:Si vous avez aussi besoin d'introduire des sauts de lignes, de sorte que l'ouverture et la fermeture des balises sont sur des lignes séparées, vous pouvez utiliser les éléments suivants très agréable elisp fonction, écrit par Benjamin Ferrari. Je l'ai trouvé sur son blog et j'espère que c'est ok pour moi de le reproduire ici:
Cela ne repose pas sur un outil externe comme bien Rangé.
Emacs peut exécuter des commandes arbitraires avec M-|. Si vous avez xmllint installé:
"M-| xmllint --format -" est-ce le format de la région sélectionnée
"C-u M-| xmllint --format -" va faire la même chose, en remplaçant la région avec la sortie
Grâce à Tim Helmstedt ci-dessus j'ai fait st comme ceci:
rapide et facile. Merci beaucoup.
(indent-region 0 (count-lines (point-min) (point-max)))
Pour introduire des sauts de ligne et ensuite assez l'impression
voici quelques modifications que j'ai faite à Benjamin Ferrari version:
search-forward-regexp
ne spécifiez pas une fin, donc il peut fonctionner sur des trucs de début de la région à la fin de la mémoire tampon (au lieu de la fin de la région)end
correctement, comme Cheeso noté.<tag></tag>
, qui modifie sa valeur. Oui, techniquement, nous sommes de modifier les valeurs de tout ici, mais un vide de début/de fin est beaucoup plus susceptibles d'être importants. Utilise maintenant deux distincts, un peu plus stricte recherche pour l'éviter.A encore le "ne pas compter sur externe rangé", etc. Toutefois, elle requiert
cl
pour laincf
macro.Une façon de le faire est
Si vous avez quelque chose en dessous de format
Dans Emacs, essayez
Ce tiret ci-dessus xml de l'exemple ci-dessous
Dans VIM, vous pouvez le faire en
Espère que cette aide.
ce qui à mon humble avis, obtient la ligne en tirets sur la droite) contre plus de fichiers
pour obtenir une belle jolie impression. Pour tous les éléments où vous souhaitez conserver l'espace blanc
ajouter leurs noms à côté de 'programlisting" comme dans "programlisting yourElementName'
HTH
J'ai pris Jason Viers version et ajouté logique de mettre xmlns déclarations sur leurs propres lignes. Cela suppose que vous avez xmlns= et xmlns: sans le moindre espace.
Bien rangé ressemble à un bon mode. Doit regarder. Va l'utiliser si j'ai vraiment besoin de toutes les fonctionnalités qu'il offre.
De toute façon, ce problème a été de me harceler pendant environ une semaine et je n'étais pas à la recherche correctement. Après la publication, j'ai fait une recherche et trouvé un site avec un elisp fonction qui le fait assez bien. L'auteur suggère aussi bien Rangé.
Merci pour répondre à Marcel
(dommage que je n'ai pas assez de points pour upmod vous).Va sur le blog bientôt sur mon blog.Voici un post à ce sujet (avec un lien vers Marcel du site).- Je utiliser
xml-reformat-tags
de xml-parser.el. Habituellement, vous voulez avoir le point au début du fichier lors de l'exécution de cette commande.Il est intéressant de noter que le fichier est incorporé dans Emacspeak. Quand j'ai été en utilisant Emacspeak au jour le jour, j'ai pensé
xml-reformat-tags
Emacs builtin. Un jour je l'ai perdu et a dû faire une recherche sur internet, et est ainsi entrée dans le wiki de la page mentionnée ci-dessus.Je suis attachant aussi mon code pour démarrer xml-parser. Vous ne savez pas si c'est le meilleur morceau de Emacs code, mais semble fonctionner pour moi.
Si vous utilisez spacemacs, il suffit d'utiliser la commande "spacemacs/tiret-région-ou-tampon".
à compter de 2017 emacs est déjà fourni avec cette fonctionnalité par défaut, mais vous devez écrire cette petite fonction dans votre
~/.emacs.d/init.el
:puis il suffit d'appeler
M-x reformat-xml
source: https://davidcapello.com/blog/emacs/reformat-xml-on-emacs/
J'ai peur, comme Benjamin Ferrari version beaucoup mieux. L'interne pretty print toujours des lieux à la fin de la balise dans une nouvelle ligne après la valeur, de l'insertion indésirables CR dans les valeurs de la balise.