1

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

4

2 回答 2

4

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

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

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

于 2013-04-30T20:00:05.150 回答
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;我认为 Mx 在isearch-mode.

如果您需要更多功能,则有一个变量isearch-search-fun-function,您可以将其设置为返回函数的函数。返回的函数用于查找下一个匹配项。

于 2013-05-01T16:56:22.303 回答