2011-09-21 15 views

Respuesta

19

MxibufferRETtT

Pero es probable que desee ser un poco más restrictiva que, porque va a abortar si no se puede hacer un reemplazo - p.ej encuentra un búfer directo de solo lectura que contiene un nombre de archivo coincidente.

Chm dentro ibuffer a leer la ayuda modo, y aprender cómo marcar fácilmente sólo las memorias intermedias que le interesan

Editar:. una versión no expreg de ibuffer-do-replace-regexp puede fácilmente escribirse mediante la modificación de la definición original:

;; defines ibuffer-do-replace-string 
(define-ibuffer-op replace-string (from-str to-str) 
    "Perform a `replace-string' in marked buffers." 
    (:interactive 
    (let* ((from-str (read-from-minibuffer "Replace string: ")) 
      (to-str (read-from-minibuffer (concat "Replace " from-str 
               " with: ")))) 
    (list from-str to-str)) 
    :opstring "replaced in" 
    :complex t 
    :modifier-p :maybe) 
    (save-window-excursion 
    (switch-to-buffer buf) 
    (save-excursion 
     (goto-char (point-min)) 
     (let ((case-fold-search ibuffer-case-fold-search)) 
     (while (search-forward from-str nil t) 
      (replace-match to-str nil t)))) 
    t)) 
+0

Gracias, pero esto no parece completamente igual a replace-string. r-s lee \ literalmente, U como regexp-sintaxis. –

+0

Muy cierto, es una función de reexpresión regexp, y no hay una variante de cadena incorporada, por lo que debe tratar con las expresiones regulares, o bien podría definir la función análoga. Añadiré uno a la respuesta. – phils

+4

Además, 'M-x ibuffer RET t Q' hará lo mismo de forma interactiva, dándole la oportunidad de confirmar cada reemplazo. –

3

Hay un montón de opciones diferentes, que tipo de depende de cómo desea hacerlo.

Echa un vistazo a Wiki de Emacs para SearchBuffers. De interés sería moccur-edit y carámbanos.

2

Gracias a Trey por mencionar Icicles buffer searching en este sentido.

Permítanme mencionar también Q (dired-do-query-replace) en Dired. Muy útil. Y ser conscientes de que se puede marcar fácilmente conjuntos de archivos en Dired utilizando las teclas de este tipo (y hay más):

  • % m (dired-mark-files-regexp) - Marque los archivos cuyos nombres coincidan con una expresión regular
  • % g (dired-mark-files-containing-regexp) - marque los archivos cuyo texto (contenido) coincida con una expresión regular
  • *. (dired-mark-extension) - Marque los archivos cuyos nombres tienen la misma extensión (por ejemplo, .el)

Asegúrese de cargar la biblioteca estándar dired-x.el (y tal vez dired-aux.el).

1

Encontré esto en un sitio web hace mucho tiempo, lo siento, no recuerdo la fuente. Si encuentra un búfer de solo lectura, se detendrá, así que tenga cuidado.

Sólo tiene que colocar esto en su .emacs

(defun query-replace-in-open-buffers (arg1 arg2) 
    "query-replace in open files" 
    (interactive "sQuery Replace in open Buffers: \nsquery with: ") 
    (mapcar 
    (lambda (x) 
    (find-file x) 
    (save-excursion 
     (beginning-of-buffer) 
     (query-replace arg1 arg2))) 
    (delq 
    nil 
    (mapcar 
    (lambda (x) 
     (buffer-file-name x)) 
    (buffer-list))))) 
Cuestiones relacionadas