В зависимости от того, что вы хотите, вы можете обмануть и использовать isearch-mode
: его третий аргумент (OP-FUN
) является функцией, вызываемой после обработки каждого ввода, а его 5-й аргумент (WORD
) может быть любой функцией, которая преобразует типизированную строку в поиске в регулярное выражение для поиска в буфере.
Для exemble:
(defun my-op-fun (string &optional lax)
(let ((words (split-string string ":")))
(mapconcat '(lambda (word)
(concat "\\<" (regexp-quote word)))
words "\\>.*")))
(defun my-isearch-beggining-of-line ()
(interactive)
(isearch-mode t t nil t 'my-op-fun))
если вы наберете "foo", он будет искать слово, начинающееся с "foo", при вводе «foo:bar» он будет искать слово "foo", за которым следует какой-то другой символ, а затем "bar" как начало слова ,
Может понадобиться некоторое мастерство регулярных выражений, чтобы сделать эту работу для вас.
Вы также можете просто посмотреть на источник isearch, чтобы увидеть, как это делается.