2011-09-26 22 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

相关问题