2011-09-26 21 views
7

我想isearch/search-replace /僅在代碼中出現(不在註釋或字符串中)。在Emacs中如何僅在代碼區域進行操作(即搜索)?

這一定是一個常見問題,那麼哪些軟件包已經這樣做了?

如果現有的軟件包沒有這樣做,我正在考慮一個小模式,其中字符串和註釋隱藏的基礎上形成將做的伎倆。有一個嗎?

+0

[這裏有一個相關的討論(http://thread.gmane.org/gmane .emacs.devel/129755)在emacs-devel上。顯然問題是你可以隱藏這些部分,但替換不會考慮它,並在隱藏部分也做它的事情。 – Tom

+0

也在這裏:http://groups.google.com/group/gnu.emacs.help/browse_thread/thread/757fb08373f9fbf8 –

回答

0

是的,你是對的。 HideShow次要模式允許您隱藏/顯示文本塊,特別是多行註釋。

隱藏/顯示註釋不是標準軟件包的一部分,但在wiki頁面上,您會找到代碼來實現這一功能。

然後isearch命令不考慮隱藏的評論。

但是:替換操作整個緩衝區,包括隱藏塊。

+0

試了一下emacs 23.2,隱藏了一些java代碼和搜索替換修改了隱藏塊的內容爲好吧,所以這不是真正的答案。 – Tom

+0

是的,替換操作整個緩衝區。 isearch,但是,並沒有看到隱藏塊 –

0

結帳narrowing

+0

哎呀,我錯過了這個問題的「代碼」一詞。那麼,因爲縮小太棒了,所以無恥地把答案留在這裏。也許你可以使用縮小和一些elisp語法表做的伎倆。 –

+0

縮小它的問題只能將緩衝區縮小到連續的塊。如果emacs支持縮小範圍的多個區域,這將是非常好的。 – Tom

2

Icicles search給你幾種方法來做到這一點。這裏有兩個:

  • 搜索 「東西」(例如defun S,sexp S,XML元素等),忽略評論(選項icicle-ignore-comments-flag)。也就是說,使用選定的代碼段作爲搜索上下文,但忽略註釋中的代碼或代碼中的任何註釋。

  • 搜索評論的complement。例如,將搜索上下文定義爲與面font-lock-comment-face或面font-lock-comment-delimiter-face(這意味着搜索評論之外的所有代碼)字體鎖定的文本區的補充。

定義搜索上下文後,只需鍵入文本以增量篩選上下文。並且您可以按照需求任意匹配replace

0

Isearch+按照你的要求做(如同Icicles ---見上面的other answer)。

您可以定義上下文是ISEARCH搜索,使用任何以下的:

  • 一個RegExp要匹配。
  • 給定文本或覆蓋屬性---搜索環境是有屬性(如特定的'面子」值或值的組合)
  • 一個給定的Emacs THING(SEXP,defun定義,列表中的文本區,字符串,評論等)---搜索上下文是給定THING類型的文本區域。

已經定義的搜索環境中,你也可以搜索補充:在 -contexts。您可以在Isearch中隨時使用C-M-~在搜索上下文和非上下文之間切換。

搜索時,默認情況下未搜索的區域會略微變暗,以使可搜索區域脫穎而出。與ISEARCH

對於上下文搜索你需要這兩個庫:

+0

除了這裏給出的文件,在哪裏加載整個冰柱的東西?只能看到https://github.com/emacsmirror/icicles/archive/master.zip –

+0

@AndreasRöhler:有很多方法可以下載冰柱。他們在這裏被描述(http://www.emacswiki.org/emacs/Icicles_-_Libraries)。例如,您可以從[MELPA](http://melpa.milkbox.net/)獲取冰柱。 (但要清楚的是,這裏提到的Isearch +文件獨立於冰柱。) – Drew

相關問題