2011-09-21 54 views

回答

19

的MxibufferRET 噸ü

但你可能會想更重要的是嚴格一點,因爲如果它不能做的替代品將中止 - 例如遇到包含匹配文件名的只讀dired緩衝區。

章米內ibuffer閱讀模式的幫助,並學習如何輕鬆標記只是你感興趣的緩衝區

編輯:非正則表達式版本的ibuffer-do-replace-regexp可以輕鬆通過修改原來的定義來編寫:

;; 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

謝謝,但這似乎並不能完全等同替換字符串。字面意義上,r就是「regexp-syntax」。 –

+0

非常真實,它是一個正則表達式替換函數,並且沒有內置的字符串變體,因此您需要處理正則表達式,否則您可以定義類似的函數。我會添加一個答案。 – phils

+4

此外,'M-x ibuffer RET t Q''將以相同的方式進行交互式操作,讓您有機會確認每個替換項。 –

3

有一堆不同的選擇,它的種類取決於你想怎麼做。

查看Emacs Wiki的SearchBuffers。感興趣的將是moccur編輯和冰柱。

2

感謝Trey在這方面提到Icicles buffer searching

我還要提及Dired中的Qdired-do-query-replace)。非常便利。而且要知道,你可以很容易地標記文件集在Dired使用鍵,如這些(和有更多):

  • %Mdired-mark-files-regexp) - 標記的文件名匹配一個正則表達式
  • %gdired-mark-files-containing-regexp) - 標記其文本(內容)匹配正則表達式的文件
  • *。dired-mark-extension) - 標記文件的名字有相同的擴展名(例如,.el

請務必裝入標準庫dired-x.el(也許dired-aux.el)。

1

很久很久以前我在一個網站上發現了這個,抱歉我不記得來源。 如果找到只讀緩衝區,它將停止,所以要小心。

只是把這個在你的.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))))) 
相關問題