自动换行I-search?

问题描述 投票:0回答:4

在 Vim 中,我可以

:set wrapscan
这样,当我进行增量搜索时,无论第一个匹配项位于光标上方还是下方,光标都会跳转到第一个匹配项。

在 Emacs 中,如果我通过

C-s
开始搜索,如果第一个匹配项位于光标上方,则搜索失败,并显示 Failing I-search。如果我再次点击
C-s
,它就会包装搜索,并显示 Wrapped I-search。如何像 Vim 中那样默认换行和跳转光标,而无需再次
C-s

search emacs
4个回答
20
投票

最简单的方法是使用以下默认设置:

(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 失败时,它会立即尝试换行。请注意,暂时禁用此默认设置非常重要,以防止在没有匹配项时出现无限循环。


8
投票

Jurta 的回答已经差不多了。这是想要的行为:

;; 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)))


0
投票

我发现这个解决方案对我(前 Vim 用户)来说是完美的。它使 isearch 像 Vim 一样工作。只需按一下 C-s / C-r

即可实现自动环绕以及切换搜索方向
© www.soinside.com 2019 - 2024. All rights reserved.