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