首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式启动交互式regexp搜索

以编程方式启动交互式regexp搜索
EN

Stack Overflow用户
提问于 2017-10-28 07:09:40
回答 1查看 173关注 0票数 1

我想定义一个用预定义的regexp来初始化isearch-forward-regexp的命令。

假设我想找出所有出现"aaa“或"bbb”的地方。我可以与isearch-forward-regexp交互输入的正则表达式是\\(aaa\\|bbb\\)

有什么方法可以在不以交互方式输入regexp的情况下完成此操作?我尝试过这样的东西:

代码语言:javascript
复制
(defun my-search ()
(interactive)
(isearch-mode t t)
(isearch-yank-string "\\(aaa\\|bbb\\)"))

但是这种方法似乎行不通,因为似乎没有任何方法可以在emacs中定义一个字符串,当它被拖入isearch时,它的计算结果是\\(aaa\\|bbb\\)

例如,"\\(aaa"的计算结果为(aaa,但"\\\\(aaa"的计算结果为\\\\(aaa。似乎没有一种方法可以计算出单个反斜杠。

有没有办法做我想做的事?

EN

回答 1

Stack Overflow用户

发布于 2017-10-28 12:44:13

此命令应该执行我认为您所要求的操作:

代码语言:javascript
复制
(defun foo (regexp) 
  (interactive (list (read-regexp "Regexp: ")))
  (isearch-mode t t)
  (let ((isearch-regexp  nil))
    (isearch-yank-string regexp)))

例如:M-x foo RET,然后输入\(aaa\|bbb\) RET

如果您从Lisp调用它,而不是以交互方式调用它,那么只需将所需的regexp作为字符串提供即可。例如:

代码语言:javascript
复制
(foo "\\(aaa\\|bbb\\)")

请注意,isearch-yank-string执行以下操作:

代码语言:javascript
复制
(if isearch-regexp (setq string (regexp-quote string)))

这就是为什么foo在调用isearch-regexp时将nil绑定到isearch-yank-string:以防止在字符串中引用regexp特殊字符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46984599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档