Давая регион для поиска в Emacs
Есть ли способ предоставить регион для поиска?
Я хочу перегрузить isearch, чтобы:
Cs -> 1. isearch как обычно, если регион не выбран, ИЛИ 2. isearch с регионом в качестве строки, используемой для поиска
пример: я выбираю слова "нет выхода", тогда Cs должен искать в буфере "нет выхода". В некотором смысле это можно сделать с помощью Cs Cw Cw, когда курсор находится в начале "нет". Интересно, есть ли способ отменить это, поэтому сначала выберите (некоторые как), а затем используйте выбор для поиска
2 ответа
Вы можете найти команды narrow-to-region
а также widen
полезно сделать ChFnarrow-to-region
RET и Chfwiden
RET, чтобы узнать больше
ОБНОВИТЬ
Вот некоторый быстрый и грязный код, который делает то, что вы хотите, я не занимался некоторыми случаями для простоты, но это должно дать представление
(add-hook 'isearch-mode-end-hook (lambda ()
(when (buffer-narrowed-p)
(widen))))
(defun my-isearch(&optional start end)
(interactive "r")
(when (region-active-p)
(narrow-to-region start end))
(call-interactively 'isearch-forward-regexp))
ОБНОВЛЕНИЕ 2
Попробуйте следующую функцию, это должно делать то, что вы хотите
(defun my-isearch(&optional start end)
(interactive "r")
(if (region-active-p)
(progn
(let ((string (buffer-substring-no-properties start end)))
(deactivate-mark)
(isearch-resume string nil nil t string nil)))
(call-interactively 'isearch-forward-regexp)))
Это именно то, что доступно с Isearch + (isearch+.el
). Ограничен ли поиск активным регионом с помощью логического параметра isearchp-restrict-to-region-flag
,
Ты можешь использовать C-x n
(команда isearchp-toggle-region-restriction
) во время поиска, чтобы переключить это поведение.
Второй логический вариант, isearchp-deactivate-region-flag
, контролирует, должен ли регион быть деактивирован во время поиска (например, чтобы вы могли лучше видеть регион поиска).
Оба параметра по умолчанию имеют значение true (поиск ограничен активным регионом, а регион деактивируется во время поиска).
(Чтобы Isearch ограничивался активным регионом в Info, вы также должны использовать библиотеку Info + (info+.el
).
ОБНОВИТЬ
Ну, это было именно то, что вы описали изначально. Ваш более поздний ответ на комментарии показывает, что вы на самом деле не хотите искать текст в регионе; Вы хотите найти текст в регионе, в другом месте в буфере. Это делает первое, а не второе.