Автоматическая упаковка I-search? - PullRequest
23 голосов
/ 13 ноября 2008

В Vim я могу :set wrapscan, чтобы при выполнении пошагового поиска курсор переходил к первому совпадению независимо от того, находится ли первое совпадение над или под курсором.

В Emacs, если я запускаю поиск с помощью C-s, поиск завершается ошибкой, говоря: Failing I-search , если первое совпадение находится над курсором. Если я снова нажму C-s, то поиск обернется, сказав Обернутый I-поиск . Как обернуть и переместить курсор по умолчанию, как в Vim, без необходимости C-s второй раз?

Ответы [ 2 ]

16 голосов
/ 13 ноября 2008

Самый простой способ сделать это - использовать следующее defadvice:

(defadvice isearch-repeat (after isearch-no-fail activate)
  (unless isearch-success
    (ad-disable-advice 'isearch-repeat 'after 'isearch-no-fail)
    (ad-activate 'isearch-repeat)
    (isearch-repeat (if isearch-forward 'forward))
    (ad-enable-advice 'isearch-repeat 'after 'isearch-no-fail)
    (ad-activate 'isearch-repeat)))

Когда Isearch терпит неудачу, он сразу же пытается снова с упаковкой. Обратите внимание, что важно временно отключить эту службу защиты, чтобы предотвратить бесконечный цикл при отсутствии совпадений.

4 голосов
/ 19 апреля 2016

Ответ Юрты прошел большую часть пути. Это желаемое поведение:

;; Prevents issue where you have to press backspace twice when
;; trying to remove the first character that fails a search
(define-key isearch-mode-map [remap isearch-delete-char] 'isearch-del-char)

(defadvice isearch-search (after isearch-no-fail activate)
  (unless isearch-success
    (ad-disable-advice 'isearch-search 'after 'isearch-no-fail)
    (ad-activate 'isearch-search)
    (isearch-repeat (if isearch-forward 'forward))
    (ad-enable-advice 'isearch-search 'after 'isearch-no-fail)
    (ad-activate 'isearch-search)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...