10

非常感谢您的帮助。

在 Emacs 中,我喜欢使用 iseach-forward (Cs),但如果突出显示的字体单词位于屏幕中间而不是最底部,我会更喜欢它。

我发现自己不断地这样做:

Cs foo Cs Cs Cs...哦!这就是我要找的'foo'!氯

有没有办法让搜索结果在屏幕中间居中?

干杯

4

5 回答 5

6

最好的方法可能是添加以下钩子:

(add-hook 'isearch-mode-end-hook 'recenter-top-bottom)

这将recenter-top-bottom在每次成功的增量搜索完成时执行该命令。

编辑:我进行了一些调查,在重复搜索相同字符串时执行的函数(即,连续输入C-sC-r在主动搜索期间)似乎是isearch-repeat-forwardand/or isearch-repeat-backward。因此,如果您还希望在每次重复时重新定位,除了定义上述钩子之外,您还需要建议所述函数,如下所示:

(defadvice
  isearch-repeat-forward
  (after isearch-repeat-forward-recenter activate)
  (recenter-top-bottom))

(defadvice
  isearch-repeat-backward
  (after isearch-repeat-backward-recenter activate)
  (recenter-top-bottom))

(ad-activate 'isearch-repeat-forward)
(ad-activate 'isearch-repeat-backward)

就个人而言,我发现由此产生的行为非常令人讨厌和迷失方向,但de gustibus non est disputandum。也许recenter-top-bottom在初始时保留使用isearch-mode-end-hookrecenter在对函数的建议中单独使用repeat会不那么令人讨厌。

Advisingisearch-forward本身就相当于添加了我上面最初建议的钩子,并且似乎对重复搜索没有影响。添加钩子更简单,我认为更惯用,所以它可能比建议函数更受欢迎。

于 2012-06-15T15:08:57.270 回答
4

谢谢尼古拉斯和格雷格。

您的建议为我指明了正确的方向。这是完成我所要求的代码:

(defadvice
    evil-search-forward
    (after evil-search-forward-recenter activate)
    (recenter))
(ad-activate 'evil-search-forward)

(defadvice
    evil-search-next
    (after evil-search-next-recenter activate)
    (recenter))
(ad-activate 'evil-search-next)

(defadvice
    evil-search-previous
    (after evil-search-previous-recenter activate)
    (recenter))
(ad-activate 'evil-search-previous)

解释:

我不想让事情变得更复杂,添加我使用 Evil(Emacs 中的 vim 模式),所以我在我的问题中省略了这一点。

我使用 defadvice 向前搜索,移动到下一个搜索项目并移动到上一个搜索项目。

值得一提的是,我没有使用 (recenter-top-bottom) 功能。这种行为很疯狂,因为它将第一个搜索项目置于屏幕中间,将第二个置于顶部,将第三个置于底部。我只是使用“recenter”功能将其始终居中于屏幕中间。

对于非 Evil 用户,代码如下所示:(未测试!)

(defadvice
    isearch-forward
    (after isearch-forward-recenter activate)
    (recenter))
(ad-activate 'isearch-forward)

(defadvice
    isearch-repeat-forward
    (after isearch-repeat-forward-recenter activate)
    (recenter))
(ad-activate 'isearch-repeat-forward)

(defadvice
    isearch-repeat-backward
    (after isearch-repeat-backward-recenter activate)
    (recenter))
(ad-activate 'isearch-repeat-backward)

干杯!

于 2012-06-20T16:24:40.910 回答
1

您可以defadvice使用recenter-top-bottom.isearch-forward

于 2012-06-15T15:07:36.397 回答
1

对于像我这样想要配置他们的 spacemacs 的其他人来说,@RafaelGP 的回答对我有用,只是稍作修改:所有邪恶的功能都包含-ex-在其中,如下所示:

 (defadvice
      evil-ex-search-forward
      (after evil-search-forward-recenter activate)
    (recenter))
  (ad-activate 'evil-ex-search-forward)

  (defadvice
      evil-ex-search-next
      (after evil-search-next-recenter activate)
    (recenter))
  (ad-activate 'evil-ex-search-next)

  (defadvice
      evil-ex-search-previous
      (after evil-search-previous-recenter activate)
    (recenter))
  (ad-activate 'evil-ex-search-previous)
于 2020-05-09T02:17:17.783 回答
0

设置scroll-margin为一个很大的值(使其大于最大可能窗口高度的一半),比如 250,maximum-scroll-margin设置为 0.5 可以达到预期的效果。两者都可以在自定义组“Windows”中找到。

但是,这显然不仅仅影响isearch。因此,在实践中,您可能希望设置更合理的值,例如 10 和 0.25。这近似于重新定位,但对于一般滚动来说并不太尴尬。

于 2022-02-18T09:57:49.503 回答