Search Emacs:联合收割机iseach forward和recenter top-bottom

Search Emacs:联合收割机iseach forward和recenter top-bottom,search,emacs,Search,Emacs,非常感谢您的帮助 在Emacs中,我喜欢使用每一个前向(C-S),但是如果突出显示的生词将集中在屏幕中间而不是在底部,我会更喜欢。 我发现自己一直在这样做: C-s foo C-s C-s C-s。。。 哦那就是我要找的“福”! C-l P>是否有一种方法将搜索结果集中在屏幕中间? 干杯您可以使用defadvice在isearch forward之后运行recenter top-bottom,最好的方法可能是添加以下挂钩: (add-hook 'isearch-mode-end-hook 'r

非常感谢您的帮助

在Emacs中,我喜欢使用每一个前向(C-S),但是如果突出显示的生词将集中在屏幕中间而不是在底部,我会更喜欢。 我发现自己一直在这样做:

C-s foo C-s C-s C-s。。。 哦那就是我要找的“福”! C-l

<> P>是否有一种方法将搜索结果集中在屏幕中间?


干杯

您可以使用
defadvice
isearch forward
之后运行
recenter top-bottom
,最好的方法可能是添加以下挂钩:

(add-hook 'isearch-mode-end-hook 'recenter-top-bottom)
这将在每次成功的增量搜索完成时执行
recenter top-bottom
命令

编辑:我已经研究了一点,重复搜索同一字符串时执行的函数(即,在活动搜索期间连续输入
C-s
C-r
)似乎是
isearch repeat forward
和/或
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)
就我个人而言,我发现由此产生的行为非常令人恼火和迷失方向,但德·古斯提布斯并不是一个有争议的人。也许将
recenter top-bottom
保留在初始
isearch模式结束钩子中使用,并在对
repeat
函数的建议中单独使用
recenter
会不那么令人讨厌


通知
isearch forward
本身就相当于添加我最初建议的钩子,似乎对重复搜索没有影响。添加钩子更简单,而且我认为更惯用,因此它可能比建议函数更可取。

谢谢Nicolas和Greg

你的建议为我指明了正确的方向。 这是实现我要求的代码:

(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)
说明:

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

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

值得一提的是,我没有使用(recenter top-bottom)函数。行为是疯狂的,因为它集中在屏幕中部的第一个搜索项目,以第二个为中心,第三个到底部。我只是使用了“重新居中”功能,使其始终居中于屏幕中间

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


干杯

对于像我这样来这里配置SpaceMac的其他人来说,@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)

很好,但如果粘贴了搜索字符串(C-y),则不会将第一个搜索结果居中。如果键入了搜索字符串,则它不会居中。想法?当搜索词在同一缓冲区窗口中时,屏幕会闪烁
 (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)