#emacs
#emacs
Вопрос:
Мне очень нравится anything.el
. Пользовательский интерфейс anything замечательный.
Я также использую isearch
очень часто, и он предоставляет привязку клавиш M-s o для вызова occur
с помощью isearch
входной строки. Но собственный режим occurre недостаточно мощный.
В occur-mode
вы не можете снова отфильтровать результат. И функция перехода тоже базовая.
Я считаю, что anything-occur
это более мощно, чем occur
, вы можете фильтровать результат, переходить на позицию в любом стиле.
Но есть проблема, как интегрировать anything-occur
? Моя последняя попытка:
(defun occur-in-isearch ()
(interactive)
(let ((case-fold-search isearch-case-fold-search))
(occur (if isearch-regexp isearch-string (regexp-quote isearch-string)))))
Я заменяю occur
на anything-occur
, но это бесполезно. anything-occur
это defun, который не принимает параметров. Я не могу передать строку isearch в anything-occur
.
Как я мог бы интегрировать anything-occur
? Или есть лучший способ использовать anything-occur
внутри isearch-mode
?
Ответ №1:
Я ничем не пользуюсь, но этот код выполняет 99% того, что вы хотите. Единственное предостережение заключается в том, что начальная строка ввода не обновляется должным образом при вводе backspace. Я не знаю, почему это так. Все остальное работает, кажется, работает так, как ожидалось.
(eval-after-load "isearch"
'(define-key isearch-mode-map (kbd "M-s o") 'isearch-anything-occur))
(defun isearch-anything-occur (regexp amp;optional nlines)
"isearch anything occur"
(interactive
;; from isearch-occur
(list
(cond
(isearch-word (concat "\b" (replace-regexp-in-string
"\W " "\W "
(replace-regexp-in-string
"^\W \|\W $" "" isearch-string)
nil t)
"\b"))
(isearch-regexp isearch-string)
(t (regexp-quote isearch-string)))
(if current-prefix-arg (prefix-numeric-value current-prefix-arg))))
;; from occur-anything
(let ((anything-compile-source-functions
;; rule out anything-match-plugin because the input is one regexp.
(delq 'anything-compile-source--match-plugin
(copy-sequence anything-compile-source-functions))))
(anything :sources 'anything-c-source-occur
:input regexp
:buffer "*Anything Occur*")))
Комментарии:
1. Это очень приятно, но это не просто
backspace
сломано — похоже, что ключевая карта anything не включена, что делает это намного менее полезным. Я не совсем понимаю, как в этом случае работают карты ключей, но было бы здорово, если бы этот код работал.
Ответ №2:
Очень похоже —
В Icicles, во время удара Isearch S-TAB
. Нажмите RET
, чтобы принять тот же шаблон поиска, или сначала отредактируйте его, а затем нажмите RET
.
Это открывает поиск Icicles со всеми совпадениями в качестве контекстов поиска. Чтобы сузить / отфильтровать эти контексты с помощью дополнительного шаблона, просто введите больше текста.
Чтобы постепенно фильтровать по нескольким шаблонам, нажмите M-SPC
между шаблонами. Перебирайте совпадения с помощью C-down
(и т.д.) или завершите до любого из них или нажмите C-mouse-2
на любое из них в *Completions
.
http://www.emacswiki.org/emacs/Icicles_-_Isearch_Enhancements#IciclesSearchFromIsearch