Давая регион для поиска в Emacs

Есть ли способ предоставить регион для поиска?

Я хочу перегрузить isearch, чтобы:

Cs -> 1. isearch как обычно, если регион не выбран, ИЛИ 2. isearch с регионом в качестве строки, используемой для поиска

пример: я выбираю слова "нет выхода", тогда Cs должен искать в буфере "нет выхода". В некотором смысле это можно сделать с помощью Cs Cw Cw, когда курсор находится в начале "нет". Интересно, есть ли способ отменить это, поэтому сначала выберите (некоторые как), а затем используйте выбор для поиска

2 ответа

Решение

Вы можете найти команды narrow-to-region а также widen полезно сделать ChFnarrow-to-regionRET и ChfwidenRET, чтобы узнать больше

ОБНОВИТЬ

Вот некоторый быстрый и грязный код, который делает то, что вы хотите, я не занимался некоторыми случаями для простоты, но это должно дать представление

(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).


ОБНОВИТЬ

Ну, это было именно то, что вы описали изначально. Ваш более поздний ответ на комментарии показывает, что вы на самом деле не хотите искать текст в регионе; Вы хотите найти текст в регионе, в другом месте в буфере. Это делает первое, а не второе.

Другие вопросы по тегам