2010-03-31 42 views

Respuesta

7

Ésta es otra manera de hacerlo:

En primer lugar, evaluar la definición de función en su *scratch* búfer:

(defun indent-marked-files() 
    (interactive) 
    (dolist (file (dired-get-marked-files)) 
    (find-file file) 
    (indent-region (point-min) (point-max)) 
    (save-buffer) 
    (kill-buffer nil))) 

A continuación, abrir un búfer Dired en el nivel superior del directorio bajo el cual se quiero cambiar todos los archivos. Proporcione al comando directo un prefijo numérico para que solicite los modificadores para dar el comando ls y agregue el interruptor R (recurse): C-u C-x d R RET su-directorio RET.

A continuación, marcar todos los archivos regulares en el listado de directorios recursivo: en primer lugar */ para marcar todos los directorios, entonces * t para alternar la selección.

Finalmente, ejecute el comando anterior: M-x sangría-marcó-archivos.

Tenga en cuenta que si ya tiene búferes visitando alguno de los archivos de destino, los matará al indent-marked-files. Además, tenga en cuenta que ninguno de los cambios de archivos se podrá deshacer; usar con precaución! Lo probé en un caso simple y parece funcionar como se describe, pero no garantizo.

+0

Lo tengo, gracias XD – lot

1

Puede probar esto:

(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)))))) 

Pero tenga en cuenta que esto debe cargar la modalidad específica de archivo una y otra vez, lo que puede implicar el resaltado de sintaxis o lo que sucede en la inicialización de una carga de ese tipo. Para trabajos de gran formato, un programa por lotes como indent que solo sangrar será mucho más rápido.

+0

Sospecho que no "cargará el modo específico de archivo una y otra vez", y en su lugar funcionará razonablemente rápido (no es que lo haya intentado en realidad :-) – offby1

+0

gracias, pero tuve un error con esto: let: Número incorrecto de argumentos: directorio-archivos, 5 – lot

6

Crea una macro para hacerlo. Abrir el directorio en el dired (C-x d), y luego:

  1. punto Póngase el primer archivo.
  2. Presione F3 para comenzar a grabar la macro.
  3. Hit RET para abrir el archivo.
  4. Formato con C-x h, C-M- \.
  5. Enterrar la memoria intermedia con M-xbury-buffer. Estarás de vuelta en el búfer directo.
  6. Baja una línea.
  7. Hit F4 para detener la grabación de la macro.

Así que ahora tiene una macro que abre el archivo en la línea actual, lo formatea, vuelve a colocarlo en la línea, y lo coloca en la siguiente línea. Ejecútelo con F4 tantas veces como sea necesario.

Cuestiones relacionadas