11
votes

Comment formater tous les fichiers sous Dir dans EMACS?

dans Emacs, j'ai format un fichier comme: 1) C-X H (ou M-X Mark-Tampon entier) 2) C-M- \ (ou M-X Enceinte-Région)

J'ai besoin d'aide Montrez-moi comment formater tous les fichiers sous un dir?


0 commentaires

4 Réponses :


1
votes

Vous pouvez essayer ceci:

(defun format-all-files (regexp)
  "Format multiple files in one command."
  (interactive "sFind files matching regexp (default all): ")
  (when (string= "" regexp) (setq regexp ""))
  (let ((dir (file-name-directory regexp))
        (nodir (file-name-nondirectory regexp)))
    (when dir (cd dir))
    (when (string= "" nodir) (setq nodir "."))
    (let ((files (directory-files "." t nodir nil t))
          (errors 0))
      (while (not (null files))
        (let ((filename (car files)))
          (if (file-readable-p filename)
              (progn 
                (set-buffer (find-file-noselect filename))
                (mark-whole-buffer)
                (indent-region-or-balanced-expression)
                (save-buffer)
                (kill-buffer (current-buffer)))
            (incf errors))
          (setq files (cdr files))))
      (when (> errors 0)
        (message (format "%d files were unreadable." errors))))))


2 commentaires

Je soupçonne que ce ne sera pas "charger le mode spécifique au fichier encore et encore" et fonctionnera à la place raisonnablement rapide (pas que je l'ai essayé en fait :-)


Merci, mais eu une erreur avec ceci: Laissez: Mauvais nombre d'arguments: fichiers de répertoire, 5



9
votes

Créer une macro pour le faire. Ouvrez le répertoire dans DIRED ( C-X D ), puis:

  1. Mettez le point sur le premier fichier.
  2. Appuyez sur F3 pour commencer à enregistrer la macro.
  3. HIT RET Pour ouvrir le fichier.
  4. Formatez-le avec C-X H , C-M - \ .
  5. enterrer le tampon avec m-x buffer-buffer . Vous serez de retour dans le tampon artificiel.
  6. descendre une ligne.
  7. HIT F4 Pour arrêter l'enregistrement de la macro.

    Alors maintenant, vous avez une macro qui ouvre le fichier sur la ligne actuelle, le format-le, redevient dirigé vers l'avant et met sur la ligne suivante. Exécutez-le avec F4 autant de fois que nécessaire.


1 commentaires

Je pense que cela devrait être marqué comme la réponse correcte pour sa simplicité. Au lieu de m-x bury-tampon , je préfère le tuer c-x k .



13
votes

Voici une autre façon d'y aller:

Premièrement, évaluez la définition de cette fonction dans votre * gratter * tampon: xxx

Suivant , ouvrez un tampon aride au niveau supérieur du répertoire sous lequel vous souhaitez modifier tous les fichiers. Donnez à la commande exprimée un préfixe numérique de sorte qu'il demandera aux commutateurs de donner à la commande ls et ajoutez le commutateur r (recueil): CU CX d R RET VOTRE-Directory RET .

Suivant, marquez tous les fichiers réguliers de la liste des répertoires récursifs: premier * / pour marquer tous les répertoires, puis * t Pour basculer la sélection.

Enfin, exécutez la commande ci-dessus: MX tiret-fichier-fichiers-fichiers .

être Conscient que si vous avez déjà des tampons visitant l'un des fichiers cible, ils seront tués par des fichiers marqués d'indent . Sachez également qu'aucun des changements de fichiers ne sera annulable; utiliser avec précaution! Je l'ai testé dans un cas simple et il semble fonctionner comme décrit, mais je ne fais aucune garantie.


1 commentaires

La solution avec les macros proposées par @legoscia est définitive et plus intuitive.



1
votes

Je suis en retard dans la réponse à cette question, mais c'est toujours le premier résultat sur Google.

J'ai fait une amélioration de la réponse @san S pour supprimer la nécessité d'une interaction réalisée compliquée . xxx

échantillon Utilisation: mx My / indent-fichiers alors ~ / dropbox alors .org < /code >.

Ce exécutera indent-région sur la Tous .org fichiers, sauvegarder le tampon puis tuer il.


0 commentaires