4

У меня есть несколько файлов, помеченных в режиме dired, и я хотел бы запустить команду (скажем (delete-trailing-whitespace) для каждого из них.

Есть ли встроенный способ сделать это, или мне нужно написать это самому?

По сути, я хочу сделать что-то вроде (dired-do-shell-command) но я хочу оценить выражение emacs, а не команду shell. Я хочу сделать это в emacs для помеченных мною файлов, поэтому я не могу использовать -batch .

3 ответа3

7

Я написал кое-что, чтобы сделать то, что я хочу, на случай, если кто-то еще найдет это полезным

Обновление: обновлено это решение с помощью команды более общего назначения.

(defun mrc-dired-do-command (command)
  "Run COMMAND on marked files. Any files not already open will be opened.
After this command has been run, any buffers it's modified will remain
open and unsaved."
  (interactive "CRun on marked files M-x ")
  (save-window-excursion
    (mapc (lambda (filename)
            (find-file filename)
            (call-interactively command))
          (dired-get-marked-files))))

Теперь M-x mrc-dired-do-command delete-trailing-whitespace делает то, что я хочу.

Я был бы рад, если бы кто-то указал мне, что я не должен был делать это, и я пропустил очевидную команду, такую как dired-do-command .

4

AFAIK dired не имеет такой возможности, но ibuffer делает - используйте dired, чтобы отметить все файлы, на которые вы хотите воздействовать (m), посетить их (C-u F), запустить ibuffer (M-x ibuffer [RET]), отметить все буферы (m) и вызовите ibuffer-do-eval (E), вставьте выражение, которое вы хотите оценить, в каждый буфер, сохраните их все (S) и закройте их (D).

1

Это не совсем то, что вы просили, но вы можете пометить буферы в ibuffer и использовать «E» (ibuffer-do-eval FORM)

Я знаю, что eshell позволяет вам использовать elisp для сценариев оболочки (вроде), так что вы, вероятно, могли бы сделать это проще из eshell.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .