2013-12-18 58 views
6

我經常使用wgrep進行重構,通常它表現相當好。然而,也有一些小麻煩,我希望可以這樣解決:優化wgrep的可用性

  1. 做一個rgrep搜索,更改爲wgrep,並執行在rgrep緩衝更改後,wgrep將打開要更改的所有文件和執行修改。但是,這樣做時,這些文件通常會在emacs中打開,因此它們將經歷正常的模式加載,如果此操作涉及大量的源文件,則需要花費相當長的時間才能解析。

    是否有可能修改wgrep使其敞開文件中最基本的模式(我猜基本模式正常模式)呢?

  2. 執行更改後,wgrep將不會關閉任何新打開的緩衝區。

    是否有可能改變wgrep,使得其將自動關閉在執行階段期間已打開(即wgrep程序啓動前未打開緩衝器)的任何緩衝液。

最後,問題:這是一個相當問題被張貼到wgrep developer的問題跟蹤器或者是一個正確的StackOverflow問題?

+0

關於「元」的問題:張貼在這裏可能會幫助其他人找到答案和/或瞭解有用的東西。如果這是一個問題或特色請求(你調查了,並且沒有辦法做你想做的事),使用開發人員和/或問題跟蹤器是沒問題的。 StackOverflow可能會幫助一些用戶進行這項調查。 – juanleon

+0

僅供參考,'normal-mode'是決定使用哪種主要模式的函數,調用它,然後設置所有文件和目錄局部變量(所有你想要避免的東西,換句話說) 。 「基本模式」就是你想要的。 – phils

+0

@phils - 如果您想避免通常的文件訪問開銷,那麼不僅需要「基本模式」:您還希望避免處理掛鉤和文件局部變量。有相當數量的擺弄和照顧。然後,如果你確實想訪問一些文件,你需要注意正確調用所有這些東西(否則殺掉緩衝區,然後恰當地訪問它)。有關此類代碼的示例,請參閱icicles-cmd1.el中的「icicle-find-file-of-content-action-1」和「icicle-find-file-of-content-1」。 – Drew

回答

3

從我在wgrep.el源文件中看到的內容,您需要修改wgrep.el的一些函數(或積極地defadvice)。

特別是,在wgrep-get-file-buffer中,012FI的RAWFILE參數應該是t,對於您的情況,應該將緩衝區添加到要殺死的緩衝區列表中。在wgrep-finish-edit一個dolist在那個新列表可能被用來殺死打開的wgrep緩衝區。

所以一個功能請求,筆者可能是爲了:-)

在此期間,你所需要的變化很容易實現(只是覆蓋短wgrep-get-file-bufferwgrep-finish-edit「之後defadvice」),但你將容易受到軟件包升級的影響。

[當然還有貼片/拉請求可以被髮送給作者,但在這種情況下,也許一個新的配置變量應增加(wgrep-auto-kill-buffer或類似的東西)