SiteMap Search ElispArea HowTo Glossary RecentChanges News Problems Suggestions

MultiReplace

An old one from USENET, slightly edited.

    From: BernardVauquelin
    Subject: Re: multiple file search-and-replace...
    Date: 1995/09/22
    Newsgroups: gnu.emacs.sources, comp.emacs.xemacs
;;; This is the file "multi.el"
;;; Put in ".emacs" something like that
;;;     (autoload 'multi-replace "multi")
;;;     (global-set-key "\^h%" 'multi-replace)
;;; and say C-H % when needed
;;; BernardVauquelin
;;; 02/12/94
(defvar multi-replace-string nil)
(defvar multi-replace-files "*")

(defun multi-replace ()
  "Do the same query-replace on many files."
  (interactive)
  (let ( (dir default-directory)
         (oldbuf (current-buffer))
         (outbuf (get-buffer-create " *temp*"))
         name replacement )
    (setq multi-replace-string (read-input "Replace: " multi-replace-string))
    (setq replacement (read-input "By: " multi-replace-string))
    (setq multi-replace-files (read-input "In files: " multi-replace-files))
    (set-buffer outbuf)
    (erase-buffer)
    (cd dir)
    (if (zerop
         (call-process "/bin/sh" nil outbuf nil "-c"
                       (concat "fgrep -il '" multi-replace-string "' "
                               multi-replace-files )))
        (progn
          (while (> (buffer-size) 0)
            (goto-char (point-min))
            (setq name (buffer-substring (point)
                                         (progn (end-of-line) (point))) )
            (save-excursion
              (find-file name)
              (goto-char (point-min))
              (query-replace multi-replace-string replacement) )
            (beginning-of-line)
            (kill-line 1) )
          (message "All done.") )
      (message "Nothing to do.") )
    (switch-to-buffer oldbuf) ))

(provide 'multi-replace)

CategorySearchAndReplace