例如,如果我在isearch-forward提示符后输入"foo spam“,如何建议isearch.el中的某些函数在搜索前将字符串转换为"foo[.?:,!]?[ \n]spam”?基本上,我想搜索文本中相邻的两个单词。我知道我可以使用isearch-forward-regexp来做这件事,但是直接键入正则表达式很痛苦,而且容易出错,而且我有很多这样的字符串要搜索。我试图理解isearch.el中的代码,但失败了。希望一些Emacs大师能帮我。谢谢。
发布于 2013-05-02 00:56:22
这里有一个粗略的解释:
(defun isearch-transform-string ()
(interactive)
(let* ((string (replace-regexp-in-string
"foo" "bar" isearch-string)))
(setq isearch-string string
isearch-message (mapconcat 'isearch-text-char-description string ""))
(isearch-search-and-update)))
(define-key isearch-mode-map (kbd "C-c C-t") 'isearch-transform-string)我认为你必须在isearch-mode-map中将它绑定到一个键上;我不认为M-x在isearch-mode中工作得很好。
如果您需要更强的能力,可以使用变量isearch-search-fun-function,您可以将其设置为返回函数的函数。返回的函数用于查找下一个匹配项。
https://stackoverflow.com/questions/16305794
复制相似问题