在Emacs中如何仅在代码区域中操作(即搜索)?

时间:2011-09-26 12:37:12

标签: emacs elisp

我希望isearch / search-replace /仅在代码中出现(不在注释或字符串中)。

这一定是一个常见的问题,那么这个包已经做到了什么?

如果现有的软件包没有这样做,我正在考虑一种小型模式,其中根据fontification隐藏字符串和注释就可以了。有吗?

4 个答案:

答案 0 :(得分:2)

Icicles search为您提供了几种方法。这是两个:

  • 搜索“内容”(例如defun s,sexp s,xml元素等),忽略评论(选项icicle-ignore-comments-flag)。也就是说,使用选定的代码段作为搜索上下文,但忽略代码中的任何注释或注释中的代码。

  • 搜索评论的complement。例如,将搜索上下文定义为使用面font-lock-comment-face或面font-lock-comment-delimiter-face进行字体锁定的文本区域的补充(这意味着搜索注释之外的所有代码)。

    < / LI>

定义搜索上下文后,只需键入文本以逐步过滤上下文。您可以根据需要replace进行任何匹配。

答案 1 :(得分:0)

是的,你是对的。 HideShow次要模式允许您隐藏/显示文本块,特别是多行注释。

隐藏/显示评论不是标准软件包的一部分,但在维基页面上,您将找到可以解决问题的代码。

然后isearch命令没有考虑隐藏的注释。

HOWEVER:replace对整个缓冲区进行操作,包括隐藏块。

答案 2 :(得分:0)

查看 narrowing

答案 3 :(得分:0)

Isearch+按照您的要求行事(Icicles ---见上文other answer)。

您可以使用以下任意内容定义Isearch搜索的 上下文

  • 要匹配的正则表达式。
  • 给定的文本或叠加属性---搜索上下文是具有属性的文本区域(例如,特定的“面”值或值的组合)
  • 给定的Emacs THING(sexp,defun,list,string,comment等)---搜索上下文是给定THING类型的文本区域。

定义了搜索上下文后,您还可以搜索补充 -contexts。您可以使用C-M-~随时在Isearch中在搜索上下文和非上下文之间切换。

搜索时,默认情况下,未搜索的区域会略微变暗,以使可搜索区域突出显示。

使用Isearch进行上下文搜索时,您需要这两个库: