是否可以在Emacs中的isearch-forward之前预处理输入字符串

时间:2013-04-30 17:36:51

标签: emacs elisp

例如,如果我在foo spam提示后输入“isearch-forward”,我如何建议isearch.el中的某些功能将字符串转换为“foo[.?:,!]?[ \n]spam”在搜索之前?基本上我想搜索文本中的两个相邻单词。我知道我可以使用isearch-forward-regexp来做到这一点,但是直接输入正则表达式并且我有很多类似的字符串来搜索是很痛苦且容易出错的。我试图了解isearch.el中的代码,但失败了。希望一些Emacs大师可以帮助我。感谢。

2 个答案:

答案 0 :(得分:4)

在增量搜索期间,您可能对isearch-toggle-word M-s w )感兴趣。

http://www.gnu.org/software/emacs/manual/html_node/emacs/Word-Search.html

这将搜索忽略标点符号,空格和行尾的单个单词。

答案 1 :(得分:1)

这是一个粗略的裂缝:

(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,您可以将其设置为返回函数的函数。返回的函数用于查找下一个匹配项。