#regex #emacs #hook #isearch
#регулярное выражение #emacs #перехват #isearch
Вопрос:
Я хотел бы иметь привязку к isearch-forward
функции Emacs, чтобы она автоматически применяла регулярное выражение между входными символами при поиске строки. Например, я хотел бы установить для этого регулярного выражения значение [-=<>]
. Если я сейчас введу foobar
в isearch, оно должно соответствовать foo<bar
, fo=ob=>ar
, f-o-o-b-a-r
и т.д.
Доступна ли такая функциональность уже? Я безуспешно изучал ELPA и MELPA. В случае, если это недоступно, и поскольку мои возможности Elisp очень ограничены: как это можно реализовать?
Комментарии:
1. Ваше использование слова «игнорировать» сбивает меня с толку. Похоже, вы хотите, чтобы Emacs автоматически вызывал
isearch-forward-regexp
и добавлял ваш шаблон между каждым символом исходного шаблона. Примеры довольно ясно показывают желаемый результат, но формулировка, похоже, не подходит.2. Правильно. Надеюсь, теперь это лучше.
Ответ №1:
Хорошо, я нашел решение самостоятельно после проверки hexl.el
из Emacs.
Вот код.
(defun my-isearch-function ()
"Make isearch skip characters -=<> while searching."
(if (not isearch-regexp)
(lambda (string amp;optional bound noerror count)
(funcall
(if isearch-forward
're-search-forward
're-search-backward)
(mapconcat (lambda (c) (regexp-quote (string c))) string
"\(?:[-=<>]*\)?")
bound
noerror
count))
(isearch-search-fun-default)))
(defun toggle-my-isearch ()
"Toggle my search mode.
If activated, incremental search skips characters -=<> while
searching.
For example, searching `foobar' matches `foo-bar' or `f-o-o=b<a>r'."
(interactive)
(if (eq isearch-search-fun-function 'isearch-search-fun-default)
(progn
(setq isearch-search-fun-function 'my-isearch-function)
(message "my isearch on"))
(setq isearch-search-fun-function 'isearch-search-fun-default)
(message "my isearch off")))
(global-set-key (kbd "s-s") 'toggle-my-isearch)
Ответ №2:
Я написал пакет под названием flex-isearch
, который в основном вставляет «.*» между каждым символом строки поиска (это немного сложнее, чем это) и переключается на поиск по регулярному выражению. Это делается автоматически, когда isearch завершается неудачей.